Authoring steps for TalkItem

pull/1/head
Jens Pelzetter 2022-08-27 09:39:19 +02:00
parent b84ac8c161
commit 97efd8d381
10 changed files with 655 additions and 40 deletions

View File

@ -1,19 +1,15 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.scientificcms.publications.contenttypes;
import org.hibernate.envers.Audited;
import org.librecms.ui.contentsections.documents.MvcAuthoringKit;
import org.scientificcms.publications.Talk;
import org.scientificcms.publications.ui.contenttypes.PublicationAbstractStep;
import org.scientificcms.publications.ui.contenttypes.PublicationMiscStep;
import org.scientificcms.publications.ui.contenttypes.TalkExtendedPropertiesStep;
import org.scientificcms.publications.ui.contenttypes.TalkItemCreateStep;
import org.scientificcms.publications.ui.contenttypes.TalkPropertiesStep;
import java.util.Objects;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import static org.scientificcms.publications.SciPublicationsConstants.*;
@ -25,31 +21,22 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@Entity
@Table(name = "TALK_ITEMS", schema = DB_SCHEMA)
@Audited
@MvcAuthoringKit(
createStep = TalkItemCreateStep.class,
authoringSteps = {
TalkPropertiesStep.class,
TalkExtendedPropertiesStep.class,
PublicationAbstractStep.class,
PublicationMiscStep.class
}
)
public class TalkItem extends PublicationItem<Talk> {
private static final long serialVersionUID = 1L;
// @OneToOne(cascade = {CascadeType.DETACH,
// CascadeType.MERGE,
// CascadeType.PERSIST,
// CascadeType.REFRESH
// })
// @JoinColumn(name = "TALK_ID")
// private Talk talk;
//
// @Override
// public Talk getPublication() {
// return talk;
// }
//
// @Override
// protected void setPublication(final Talk talk) {
// this.talk = talk;
// }
@Override
public int hashCode() {
int hash = super.hashCode();
// hash = 67 * hash + Objects.hashCode(talk);
return hash;
}
@ -69,10 +56,6 @@ public class TalkItem extends PublicationItem<Talk> {
}
final TalkItem other
= (TalkItem) obj;
// if (!other.canEqual(this)) {
// return false;
// }
// return Objects.equals(this.talk, other.getPublication());
return other.canEqual(this);
}
@ -81,11 +64,4 @@ public class TalkItem extends PublicationItem<Talk> {
return obj instanceof TalkItem;
}
// @Override
// public String toString(final String data) {
// return super.toString(String.format(", talk = %s%s",
// Objects.toString(talk),
// data));
// }
}

View File

@ -35,7 +35,9 @@ public class PublicationAuthoringSteps implements MvcAuthoringSteps {
ProceedingsPropertiesStep.class,
ProceedingsExtendedPropertiesStep.class,
PublicationAbstractStep.class,
PublicationMiscStep.class
PublicationMiscStep.class,
TalkPropertiesStep.class,
TalkExtendedPropertiesStep.class
);
}

View File

@ -0,0 +1,161 @@
package org.scientificcms.publications.ui.contenttypes;
import org.libreccm.security.AuthorizationRequired;
import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import org.scientificcms.publications.Talk;
import org.scientificcms.publications.contenttypes.TalkItem;
import org.scientificcms.publications.ui.SciPublicationsUiConstants;
import javax.enterprise.context.RequestScoped;
import javax.mvc.Controller;
import javax.transaction.Transactional;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Path(MvcAuthoringSteps.PATH_PREFIX + "talk-extendedproeprties")
@Controller
@MvcAuthoringStepDef(
bundle = SciPublicationsUiConstants.BUNDLE,
descriptionKey = "authoringsteps.extendedproperties.description",
labelKey = "authoringsteps.extendedproperties.label",
supportedDocumentType = TalkItem.class
)
public class TalkExtendedPropertiesStep
extends AbstractPublicationExtendedPropertiesStep<TalkItem, Talk> {
@Override
public Class<TalkExtendedPropertiesStep> getStepClass() {
return TalkExtendedPropertiesStep.class;
}
@Override
protected Class<Talk> getPublicationClass() {
return Talk.class;
}
@Override
public String getEditStepUrlFragment() {
return "talk-extendedproperties";
}
@Override
protected String getStepTemplatePath() {
return "org/scientificcms/contenttypes/ui/talk/edit-extended-properties.xhtml";
}
@GET
@Path("/")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String showStep(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath
) {
return super.showStep(sectionIdentifier, documentPath);
}
@POST
@Path("/properties")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String updateProperties(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("languageOfPublication")
final String languageOfPublicationParam,
@FormParam("peerReviewed")
final String peerReviewedParam,
@FormParam("yearFirstPublished")
final String yearFirstPublishedParam
) {
return super.updateProperties(
sectionIdentifier,
documentPath,
languageOfPublicationParam,
peerReviewedParam,
yearFirstPublishedParam
);
}
@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("volumeOfSeries")
final String volumeOfSeries
) {
return super.editVolumeInSeries(
sectionIdentifier,
documentPath,
volumeInSeriesUuid,
volumeOfSeries
);
}
@POST
@Path("/series/{volumeInSeriesUuid}/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

@ -0,0 +1,55 @@
package org.scientificcms.publications.ui.contenttypes;
import org.libreccm.l10n.GlobalizationHelper;
import org.scientificcms.publications.Talk;
import org.scientificcms.publications.contenttypes.TalkItem;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Named("SciPublicationsTalkCreateStep")
public class TalkItemCreateStep
extends AbstractPublicationItemCreateStep<TalkItem, Talk> {
@Inject
private GlobalizationHelper globalizationHelper;
@Override
public String getDocumentType() {
return TalkItem.class.getName();
}
@Override
public String getDescription() {
return globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("talkitem.createstep.description");
}
@Override
public String showCreateStep() {
return "org/scientificcms/contenttypes/ui/talk/create-talk.xhtml";
}
@Override
public Class<TalkItem> getPublicationItemClass() {
return TalkItem.class;
}
@Override
public Talk createPublication() {
return new Talk();
}
@Override
public String getEditStepName() {
return TalkPropertiesStep.EDIT_STEP_URL_FRAGMENT;
}
}

View File

@ -0,0 +1,304 @@
package org.scientificcms.publications.ui.contenttypes;
import org.libreccm.security.AuthorizationRequired;
import org.librecms.ui.contentsections.ContentSectionNotFoundException;
import org.librecms.ui.contentsections.documents.DocumentNotFoundException;
import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import org.scientificcms.publications.SciPublicationsConstants;
import org.scientificcms.publications.Talk;
import org.scientificcms.publications.contenttypes.TalkItem;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.mvc.Controller;
import javax.transaction.Transactional;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import static org.scientificcms.publications.ui.contenttypes.ExpertisePropertiesStep.EDIT_STEP_URL_FRAGMENT;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Path(
MvcAuthoringSteps.PATH_PREFIX
+ TalkPropertiesStep.EDIT_STEP_URL_FRAGMENT
)
@Controller
@MvcAuthoringStepDef(
bundle = SciPublicationsConstants.BUNDLE,
descriptionKey = "authoringsteps.basicproperties.description",
labelKey = "authoringsteps.basicproperties.label",
supportedDocumentType = TalkItem.class
)
public class TalkPropertiesStep
extends AbstractPublicationPropertiesStep<TalkItem, Talk> {
public static final String EDIT_STEP_URL_FRAGMENT = "talk-basicproperties";
@Override
public Class<TalkPropertiesStep> getStepClass() {
return TalkPropertiesStep.class;
}
@Override
protected String getEditStepUrlFragment() {
return EDIT_STEP_URL_FRAGMENT;
}
@Override
protected String getStepTemplatePath() {
return "org/scientificcms/contenttypes/ui/talk/edit-talk.xhtml";
}
@Override
public Class<Talk> getPublicationClass() {
return Talk.class;
}
@Override
@Transactional(Transactional.TxType.REQUIRED)
protected void init() throws ContentSectionNotFoundException,
DocumentNotFoundException {
super.init();
}
@GET
@Path("/")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String showStep(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath
) {
return super.showStep(sectionIdentifier, documentPath);
}
@POST
@Path("/name")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String updateName(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("name") @DefaultValue("")
final String name
) {
return super.updateName(sectionIdentifier, documentPath, name);
}
@POST
@Path("/title/@add")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String addTitle(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("locale") final String localeParam,
@FormParam("value") final String value
) {
return super.addTitle(
sectionIdentifier,
documentPath,
localeParam,
value
);
}
@POST
@Path("/title/@edit/{locale}")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String editTitle(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("locale") final String localeParam,
@FormParam("value") final String value
) {
return super.editTitle(
sectionIdentifier,
documentPath,
localeParam,
value
);
}
@POST
@Path("/title/@remove/{locale}")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String removeTitle(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("locale") final String localeParam
) {
return super.removeTitle(sectionIdentifier, documentPath, localeParam);
}
@POST
@Path("/shortdescription/@add")
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String addShortDescription(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("locale") final String localeParam,
@FormParam("value") final String value
) {
return super.addShortDescription(
sectionIdentifier,
documentPath,
localeParam,
value
);
}
@POST
@Path("/shortdescription/@edit/{locale}")
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String editShortDescription(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("locale") final String localeParam,
@FormParam("value") final String value
) {
return super.editShortDescription(
sectionIdentifier,
documentPath,
localeParam,
value
);
}
@POST
@Path("/shortdescription/@remove/{locale}")
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String removeShortDescription(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("locale") final String localeParam
) {
return super.removeShortDescription(
sectionIdentifier,
documentPath,
localeParam
);
}
@POST
@Path("/authors")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String addAuthor(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("authorIdentifier")
final String authorIdentifier,
@FormParam("editor")
final String editorParam
) {
return super.addAuthor(
sectionIdentifier,
documentPath,
authorIdentifier,
editorParam
);
}
@POST
@Path("/authors/{authorshipUuid}")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String editAuthorship(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("authorshipUuid")
final String authorshipUuid,
@FormParam("editor")
final String editorParam
) {
return super.editAuthorship(
sectionIdentifier,
documentPath,
authorshipUuid,
editorParam
);
}
@POST
@Path("/authors/{authorshipUuid}/remove")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String removeAuthorship(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("authorshipUuid")
final String authorshipUuid
) {
return super.removeAuthorship(
sectionIdentifier,
documentPath,
authorshipUuid
);
}
@POST()
@Path("/properties")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String updateProperties(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("yearOfPublication")
final String yearOfPublicationParam
) {
return super.updateProperties(
sectionIdentifier,
documentPath,
yearOfPublicationParam
);
}
}

View File

@ -0,0 +1,47 @@
<!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:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/scientificcms/contenttypes/ui/create-publication.xhtml">
<ui:param name="availableLocales"
value="#{SciPublicationsTalkCreateStep.availableLocales}" />
<ui:param name="availableWorkflows"
value="#{SciPublicationsTalkCreateStep.availableWorkflows}" />
<ui:param name="contentSection"
value="#{SciPublicationsTalkCreateStep.contentSectionLabel}" />
<ui:param name="createFormSubmitLabel"
value="#{SciPublicationsUiMessageBundle['talk.createform.submit']}" />
<ui:param name="documentType"
value="#{SciPublicationsTalkCreateStep.documentType}" />
<ui:param name="folderPath"
value="#{SciPublicationsTalkCreateStep.folderPath}" />
<ui:param name="initialLocale"
value="#{SciPublicationsTalkCreateStep.initialLocale}" />
<ui:param name="messages"
value="#{SciPublicationsTalkCreateStep.messages}" />
<ui:param name="nameValue"
value="#{SciPublicationsTalkCreateStep.name}" />
<ui:param name="publicationCreateStepTitle"
value="#{SciPublicationsUiMessageBundle['talk.createform.title']}" />
<ui:param name="selectedWorkflow"
value="#{SciPublicationsTalkCreateStep.selectedWorkflow}" />
<ui:param name="title"
value="#{SciPublicationsTalkCreateStep.title}" />
</ui:composition>
</html>

View File

@ -0,0 +1,33 @@
<!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/scientificcms/contenttypes/ui/edit-publication-with-publisher-extented-properties.xhtml">
<ui:param name="authoringStep"
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@talk-extendedproperties" />
<ui:param name="authoringStepTitle"
value="#{SciPublicationsUiMessageBundle.getMessage('talk.extendedproperties.header', [CmsSelectedDocumentModel.itemName])}" />
<ui:param name="editStepUrlFragement"
value="proceedings-extendedproperties" />
<ui:define name="publicationWithPublisherExtendedPropertiesList">
</ui:define>
<ui:define name="publicationWithPublisherExtendedPropertiesFormElements">
</ui:define>
<ui:define name="publicationWithPublisherExtendedPropertiesWidgets">
</ui:define>
</ui:composition>
</html>

View File

@ -0,0 +1,27 @@
<!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:scicms="http://xmlns.jcp.org/jsf/composite/components/scicms"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication.xhtml">
<ui:param name="authoringStep"
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@talk-basicproperties" />
<ui:param name="authoringStepTitle"
value="#{SciPublicationsUiMessageBundle.getMessage('talk.basicproperties.header', [SciCmsPublicationPropertiesStepModel.name])}" />
<ui:define name="publicationMessages"></ui:define>
<ui:define name="publicationBasicPropertiesForm"></ui:define>
<ui:define name="publicationBasicPropertiesDl"></ui:define>
<ui:define name="publicationProperties"></ui:define>
</ui:composition>
</html>

View File

@ -632,3 +632,8 @@ internetarticle.extendedproperties.urn.help=The URN of the internet article.
internetarticle.extendedproperties.urn.label=URN
internetarticle.extendedproperties.doi.help=The DOI of the internet article.
internetarticle.extendedproperties.doi.label=DOI
talkitem.createstep.description=Create a new talk.
talk.createform.submit=Create Talk
talk.createform.title=Create new talk
talk.basicproperties.header=Edit basic properties of talk {0}
talk.extendedproperties.header=Edit extended properties of talk {0}

View File

@ -632,3 +632,8 @@ internetarticle.extendedproperties.urn.help=Die URN des Internet-Artikels.
internetarticle.extendedproperties.urn.label=URN
internetarticle.extendedproperties.doi.help=Die DOI des Internet-Artikels.
internetarticle.extendedproperties.doi.label=DOI
talkitem.createstep.description=Einen neuen Vortrag anlegen.
talk.createform.submit=Vortrag anlegen
talk.createform.title=Neuer Vortrag
talk.basicproperties.header=Basiseigenschaften des Vortrages {0} bearbeiten
talk.extendedproperties.header=Erweiterte Eigenschaften des Vortrages {0} bearbeiten