Bug fixes for sci-types-project

pull/1/head
Jens Pelzetter 2022-04-21 20:47:28 +02:00
parent 2745426835
commit 8c2ae8bd1d
24 changed files with 966 additions and 242 deletions

View File

@ -11,6 +11,11 @@ import org.hibernate.envers.Audited;
import org.libreccm.l10n.LocalizedString;
import org.librecms.contentsection.ContentItem;
import org.librecms.contenttypes.ContentTypeDescription;
import org.librecms.ui.contentsections.documents.MvcAuthoringKit;
import org.scientificcms.contenttypes.sciproject.ui.SciProjectCreateStep;
import org.scientificcms.contenttypes.sciproject.ui.SciProjectDescriptionStep;
import org.scientificcms.contenttypes.sciproject.ui.SciProjectFundingStep;
import org.scientificcms.contenttypes.sciproject.ui.SciProjectPropertiesStep;
import java.io.Serializable;
import java.time.LocalDate;
@ -44,6 +49,14 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*;
labelBundle = "org.scientificcms.contenttypes.SciProject",
descriptionBundle = "org.scientificcms.contenttypes.SciProject"
)
@MvcAuthoringKit(
createStep = SciProjectCreateStep.class,
authoringSteps = {
SciProjectPropertiesStep.class,
SciProjectDescriptionStep.class,
SciProjectFundingStep.class
}
)
@NamedQueries({
@NamedQuery(
name = "SciProject.findWhereBeginIsBefore",
@ -144,6 +157,7 @@ public class SciProject extends ContentItem implements Serializable {
public SciProject() {
super();
shortDescription = new LocalizedString();
contacts = new ArrayList<>();
members = new ArrayList<>();
}

View File

@ -0,0 +1,35 @@
package org.scientificcms.contenttypes.sciproject.ui;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import java.util.Set;
import javax.enterprise.context.ApplicationScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@ApplicationScoped
public class SciProjectAuthoringSteps implements MvcAuthoringSteps {
@Override
public Set<Class<?>> getClasses() {
return Set.of(
SciProjectPropertiesStep.class,
SciProjectDescriptionStep.class,
SciProjectFundingStep.class
);
}
@Override
public Set<Class<?>> getResourceClasses() {
return Set.of(
SciProjectDescriptionStepService.class,
SciProjectFundingStepService.class
);
}
}

View File

@ -352,26 +352,27 @@ public class SciProjectCreateStep
&& formParams.get(FORM_PARAM_END) != null
&& formParams.get(FORM_PARAM_END).length > 0) {
endParam = formParams.get(FORM_PARAM_END)[0];
if (endParam != null) {
try {
return LocalDate.parse(
endParam,
DateTimeFormatter.ISO_DATE
);
} catch (DateTimeParseException ex) {
addMessage(
"danger",
globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("createstep.enddate.error.malformed")
);
return null;
}
} else {
if (endParam == null || endParam.isBlank()) {
return null;
}
try {
return LocalDate.parse(
endParam,
DateTimeFormatter.ISO_DATE
);
} catch (DateTimeParseException ex) {
addMessage(
"danger",
globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("createstep.enddate.error.malformed")
);
return null;
}
} else {
return null;
}
}
}

View File

@ -30,5 +30,5 @@ public final class SciProjectStepsConstants {
}
public static final String BUNDLE
= "org.scientificcms.contentypes.sciproject.ui.SciProjectBundle";
= "org.scientificcms.contenttypes.sciproject.ui.SciProjectBundle";
}

View File

@ -0,0 +1,107 @@
<!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/librecms/ui/contentsection/contentsection.xhtml">
<ui:define name="main">
<div class="container">
<h1>#{SciProjectMessageBundle['createstep.title']}</h1>
<c:forEach items="#{SciProjectCreateStep.messages.entrySet()}"
var="message">
<div class="alert alert-#{message.key}"
role="alert">
#{message.value}
</div>
</c:forEach>
<form action="#{mvc.basePath}/#{SciProjectCreateStep.contentSectionLabel}/documents/#{SciProjectCreateStep.folderPath}@create/#{SciProjectCreateStep.documentType}"
method="post">
<bootstrap:formGroupText
help="#{SciProjectMessageBundle['createform.name.help']}"
inputId="name"
label="#{SciProjectMessageBundle['createform.name.label']}"
name="name"
pattern="^([a-zA-Z0-9_-]*)$"
required="true"
value="#{SciProjectCreateStep.name}"
/>
<bootstrap:formGroupSelect
help="#{SciProjectMessageBundle['createform.initial_locale.help']}"
inputId="locale"
label="#{SciProjectMessageBundle['createform.initial_locale.label']}"
name="locale"
options="#{SciProjectCreateStep.availableLocales}"
required="true"
selectedOptions="#{[SciProjectCreateStep.initialLocale]}"
/>
<bootstrap:formGroupText
help="#{SciProjectMessageBundle['createform.title.help']}"
inputId="title"
label="#{SciProjectMessageBundle['createform.title.label']}"
name="title"
required="true"
value="#{SciProjectCreateStep.title}"
/>
<bootstrap:formGroupDate
help="#{SciProjectMessageBundle['createform.begin.help']}"
inputId="begin"
label="#{SciProjectMessageBundle['createform.begin.label']}"
name="begin"
required="true"
value="#{SciProjectCreateStep.beginParam}"
/>
<bootstrap:formGroupDate
help="#{SciProjectMessageBundle['createform.end.help']}"
inputId="end"
label="#{SciProjectMessageBundle['createform.end.label']}"
name="end"
required="false"
value="#{SciProjectCreateStep.endParam}"
/>
<bootstrap:formGroupTextarea
cols="80"
help="#{SciProjectMessageBundle['createform.summary.help']}"
inputId="summary"
label="#{SciProjectMessageBundle['createform.summary.label']}"
name="summary"
required="true"
rows="16"
value="#{SciProjectCreateStep.shortDescription}"
/>
<bootstrap:formGroupSelect
help="#{SciProjectMessageBundle['createform.workflow.help']}"
inputId="workflow"
label="#{SciProjectMessageBundle['createform.workflow.label']}"
name="workflow"
options="#{SciProjectCreateStep.availableWorkflows}"
selectedOptions="#{[SciProjectCreateStep.selectedWorkflow]}"
/>
<a class="btn btn-warning"
href="#{mvc.basePath}/#{SciProjectCreateStep.contentSectionLabel}/documentsfolders/#{SciProjectCreateStep.folderPath}">
#{SciProjectMessageBundle['createform.cancel']}
</a>
<button class="btn btn-success"
type="submit">
#{SciProjectMessageBundle['createform.submit']}
</button>
</form>
</div>
</ui:define>
</ui:composition>
</html>

View File

@ -5,46 +5,145 @@
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/librecms/ui/contentsection/documents/authoringstep.xhtml">
</ui:composition>
<ui:param name="authoringStep"
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties" />
<ui:param name="authoringStep"
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties" />
<ui:define name="authoringStep">
<h2>#{SciProjectMessageBundle.getMessage('basicproperties.header', [SciProjectPropertiesStep.name])}</h2>
<ui:define name="authoringStep">
<h2>#{SciProjectMessageBundle.getMessage('basicproperties.header', [SciProjectPropertiesStep.name])}</h2>
<h3>#{SciProjectMessageBundle['basicproperties.name.header']}</h3>
<div class="d-flex">
<pre class="mr-2">#{SciProjectPropertiesStep.name}</pre>
<c:if test="#{CmsSelectedDocumentModel.canEdit}">
<button class="btn btn-primary btn-sm"
data-toggle="modal"
data-target="#name-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{SciProjectMessageBundle['basicproperties.name.edit']}
</span>
</button>
</c:if>
</div>
<h3>#{SciProjectMessageBundle['basicproperties.name.header']}</h3>
<div class="d-flex">
<pre class="mr-2">#{SciProjectPropertiesStep.name}</pre>
<c:if test="#{CmsSelectedDocumentModel.canEdit}">
<div aria-hidden="true"
aria-labelledby="name-edit-dialog-title"
class="modal fade"
id="name-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/name"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="name-edit-dialog-title">
#{SciProjectMessageBundle['basicproperties.name.edit.title']}
</h4>
<button aria-label="#{SciProjectMessageBundle['basicproperties.name.edit.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupText
help="#{SciProjectMessageBundle['basicproperties.name.help']}"
inputId="name"
label="#{SciProjectMessageBundle['basicproperties.name.label']}"
name="name"
pattern="^([a-zA-Z0-9_-]*)$"
required="true"
value="#{SciProjectPropertiesStep.name}"/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciProjectMessageBundle['basicproperties.name.edit.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciProjectMessageBundle['basicproperties.name.edit.submit']}
</button>
</div>
</form>
</div>
</div>
</c:if>
<libreccm:localizedStringEditor
addButtonLabel="#{SciProjectMessageBundle['basicproperties.title.add']}"
addDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.title.add.cancel']}"
addDialogLocaleSelectHelp="#{SciProjectMessageBundle['basicproperties.title.add.locale.help']}"
addDialogLocaleSelectLabel="#{SciProjectMessageBundle['basicproperties.title.add.locale.label']}"
addDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.title.add.submit']}"
addDialogTitle="#{SciProjectMessageBundle['basicproperties.title.add.header']}"
addDialogValueHelp="#{SciProjectMessageBundle['basicproperties.title.add.value.help']}"
addDialogValueLabel="#{SciProjectMessageBundle['basicproperties.title.add.value.label']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/title/@add"
editButtonLabel="#{SciProjectMessageBundle['basicproperties.title.edit']}"
editDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.title.edit.cancel']}"
editDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.title.edit.submit']}"
editDialogTitle="#{SciProjectMessageBundle['basicproperties.title.edit.header']}"
editDialogValueHelp="#{SciProjectMessageBundle['basicproperties.title.edit.value.help']}"
editDialogValueLabel="#{SciProjectMessageBundle['basicproperties.title.edit.value.label']}"
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/title/@edit"
editorId="title-editor"
hasUnusedLocales="#{!SciProjectPropertiesStep.unusedTitleLocales.isEmpty()}"
headingLevel="3"
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
readOnly="#{!CmsSelectedDocumentModel.canEdit}"
removeButtonLabel="#{SciProjectMessageBundle['basicproperties.title.remove']}"
removeDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.title.remove.cancel']}"
removeDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.title.remove.submit']}"
removeDialogText="#{SciProjectMessageBundle['basicproperties.title.remove.text']}"
removeDialogTitle="#{SciProjectMessageBundle['basicproperties.title.remove.header']}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/title/@remove"
title="#{SciProjectMessageBundle['basicproperties.title.header']}"
unusedLocales="#{SciProjectPropertiesStep.unusedTitleLocales}"
values="#{SciProjectPropertiesStep.titleValues}"
/>
<div class="d-flex">
<h3 class="mr-2">#{SciProjectMessageBundle['basicproperties.begin.header']}</h3>
<button class="btn btn-primary btn-sm"
data-toggle="modal"
data-target="#name-edit-dialog"
data-target="#begin-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{SciProjectMessageBundle['basicproperties.name.edit']}
#{SciProjectMessageBundle['basicproperties.begin.edit']}
</span>
</button>
</c:if>
</div>
<c:if test="#{CmsSelectedDocumentModel.canEdit}">
</div>
<dl>
<dt>#{SciProjectMessageBundle['basicproperties.begin.label']}</dt>
<dd>
#{SciProjectPropertiesStep.begin}
</dd>
</dl>
<div aria-hidden="true"
aria-labelledby="name-edit-dialog-title"
aria-labelledby="begin-edit-dialog-title"
class="modal fade"
id="name-edit-dialog"
id="begin-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/name"
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/begin"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="name-edit-dialog-title">
#{SciProjectMessageBundle['basicproperties.name.edit.title']}
id="begin-edit-dialog-title">
#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.title']}
</h4>
<button aria-label="#{SciProjectMessageBundle['basicproperties.name.edit.close']}"
<button aria-label="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
@ -52,230 +151,131 @@
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupText
help="#{SciProjectMessageBundle['basicproperties.name.help']}"
inputId="name"
label="#{SciProjectMessageBundle['basicproperties.name.label']}"
name="name"
pattern="^([a-zA-Z0-9_-]*)$"
<bootstrap:formGroupDate
help="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.startdate.help']}"
inputId="startDateTime"
label="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.startdate.label']}"
name="begin"
required="true"
value="#{SciProjectPropertiesStep.name}"/>
value="#{SciProjectPropertiesStep.begin}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciProjectMessageBundle['basicproperties.name.edit.close']}
#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciProjectMessageBundle['basicproperties.name.edit.submit']}
#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.submit']}
</button>
</div>
</form>
</div>
</div>
</c:if>
<libreccm:localizedStringEditor
addButtonLabel="#{SciProjectMessageBundle['basicproperties.title.add']}"
addDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.title.add.cancel']}"
addDialogLocaleSelectHelp="#{SciProjectMessageBundle['basicproperties.title.add.locale.help']}"
addDialogLocaleSelectLabel="#{SciProjectMessageBundle['basicproperties.title.add.locale.label']}"
addDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.title.add.submit']}"
addDialogTitle="#{SciProjectMessageBundle['basicproperties.title.add.header']}"
addDialogValueHelp="#{SciProjectMessageBundle['basicproperties.title.add.value.help']}"
addDialogValueLabel="#{SciProjectMessageBundle['basicproperties.title.add.value.label']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/title/@add"
editButtonLabel="#{SciProjectMessageBundle['basicproperties.title.edit']}"
editDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.title.edit.cancel']}"
editDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.title.edit.submit']}"
editDialogTitle="#{SciProjectMessageBundle['basicproperties.title.edit.header']}"
editDialogValueHelp="#{SciProjectMessageBundle['basicproperties.title.edit.value.help']}"
editDialogValueLabel="#{SciProjectMessageBundle['basicproperties.title.edit.value.label']}"
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/title/@edit"
editorId="title-editor"
hasUnusedLocales="#{!SciProjectPropertiesStep.unusedTitleLocales.isEmpty()}"
headingLevel="3"
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
readOnly="#{!CmsSelectedDocumentModel.canEdit}"
removeButtonLabel="#{SciProjectMessageBundle['basicproperties.title.remove']}"
removeDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.title.remove.cancel']}"
removeDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.title.remove.submit']}"
removeDialogText="#{SciProjectMessageBundle['basicproperties.title.remove.text']}"
removeDialogTitle="#{SciProjectMessageBundle['basicproperties.title.remove.header']}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/title/@remove"
title="#{SciProjectMessageBundle['basicproperties.title.header']}"
unusedLocales="#{SciProjectPropertiesStep.unusedTitleLocales}"
values="#{SciProjectPropertiesStep.titleValues}"
/>
<div class="d-flex">
<h3 class="mr-2">#{SciProjectMessageBundle['basicproperties.begin.header']}</h3>
<button class="btn btn-primary btn-sm"
data-toggle="modal"
data-target="#begin-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{SciProjectMessageBundle['basicproperties.begin.edit']}
</span>
</button>
</div>
<dl>
<dt>#{SciProjectMessageBundle['basicproperties.begin.label']}</dt>
<dd>
#{SciProjectPropertiesStep.begin}
</dd>
</dl>
<div aria-hidden="true"
aria-labelledby="begin-edit-dialog-title"
class="modal fade"
id="begin-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/begin"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="begin-edit-dialog-title">
#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.title']}
</h4>
<button aria-label="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupDate
help="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.startdate.help']}"
inputId="startDateTime"
label="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.startdate.label']}"
name="begin"
required="true"
value="#{SciProjectPropertiesStep.begin}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.submit']}
</button>
</div>
</form>
<div class="d-flex">
<h3 class="mr-2">#{SciProjectMessageBundle['basicproperties.end.header']}</h3>
<button class="btn btn-primary btn-sm"
data-toggle="modal"
data-target="#end-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{SciProjectMessageBundle['basicproperties.end.edit']}
</span>
</button>
</div>
</div>
<div class="d-flex">
<h3 class="mr-2">#{SciProjectMessageBundle['basicproperties.end.header']}</h3>
<button class="btn btn-primary btn-sm"
data-toggle="modal"
data-target="#end-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{SciProjectMessageBundle['basicproperties.end.edit']}
</span>
</button>
</div>
<dl>
<dt>#{SciProjectMessageBundle['basicproperties.end.label']}</dt>
<dd>
#{SciProjectPropertiesStep.end}
</dd>
</dl>
<div aria-hidden="true"
aria-labelledby="end-edit-dialog-title"
class="modal fade"
id="end-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/end"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="end-edit-dialog-title">
#{SciProjectMessageBundle['basicproperties.end.edit.dialog.title']}
</h4>
<button aria-label="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupDate
help="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.enddate.help']}"
inputId="startDateTime"
label="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.enddate.label']}"
name="end"
required="true"
value="#{SciProjectPropertiesStep.endDate}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciProjectMessageBundle['basicproperties.end.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciProjectMessageBundle['basicproperties.end.edit.dialog.submit']}
</button>
</div>
</form>
<dl>
<dt>#{SciProjectMessageBundle['basicproperties.end.label']}</dt>
<dd>
#{SciProjectPropertiesStep.end}
</dd>
</dl>
<div aria-hidden="true"
aria-labelledby="end-edit-dialog-title"
class="modal fade"
id="end-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/end"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="end-edit-dialog-title">
#{SciProjectMessageBundle['basicproperties.end.edit.dialog.title']}
</h4>
<button aria-label="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupDate
help="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.enddate.help']}"
inputId="startDateTime"
label="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.enddate.label']}"
name="end"
required="true"
value="#{SciProjectPropertiesStep.endDate}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciProjectMessageBundle['basicproperties.end.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciProjectMessageBundle['basicproperties.end.edit.dialog.submit']}
</button>
</div>
</form>
</div>
</div>
</div>
<libreccm:localizedStringEditor
addButtonLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add']}"
addDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.cancel']}"
addDialogLocaleSelectHelp="#{SciProjectMessageBundle['basicproperties.shortdescription.add.locale.help']}"
addDialogLocaleSelectLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.locale.label']}"
addDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.submit']}"
addDialogTitle="#{SciProjectMessageBundle['basicproperties.shortdescription.add.header']}"
addDialogValueHelp="#{SciProjectMessageBundle['basicproperties.shortdescription.add.value.help']}"
addDialogValueLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.value.label']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@add"
editButtonLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit']}"
editDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.cancel']}"
editDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.submit']}"
editDialogTitle="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.header']}"
editDialogValueHelp="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.value.help']}"
editDialogValueLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.value.label']}"
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@edit"
editorId="title-editor"
hasUnusedLocales="#{!SciProjectPropertiesStep.unusedShortDescriptionLocales.isEmpty()}"
headingLevel="3"
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
readOnly="#{!CmsSelectedDocumentModel.canEdit}"
removeButtonLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.remove']}"
removeDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.cancel']}"
removeDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.submit']}"
removeDialogText="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.text']}"
removeDialogTitle="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.header']}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@remove"
title="#{SciProjectMessageBundle['basicproperties.shortdescription.header']}"
unusedLocales="#{SciProjectPropertiesStep.unusedShortDescriptionLocales}"
useTextarea="true"
values="#{SciProjectPropertiesStep.shortDescriptionValues}"
/>
<libreccm:localizedStringEditor
addButtonLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add']}"
addDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.cancel']}"
addDialogLocaleSelectHelp="#{SciProjectMessageBundle['basicproperties.shortdescription.add.locale.help']}"
addDialogLocaleSelectLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.locale.label']}"
addDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.submit']}"
addDialogTitle="#{SciProjectMessageBundle['basicproperties.shortdescription.add.header']}"
addDialogValueHelp="#{SciProjectMessageBundle['basicproperties.shortdescription.add.value.help']}"
addDialogValueLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.add.value.label']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@add"
editButtonLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit']}"
editDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.cancel']}"
editDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.submit']}"
editDialogTitle="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.header']}"
editDialogValueHelp="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.value.help']}"
editDialogValueLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.edit.value.label']}"
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@edit"
editorId="title-editor"
hasUnusedLocales="#{!SciProjectPropertiesStep.unusedShortDescriptionLocales.isEmpty()}"
headingLevel="3"
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
readOnly="#{!CmsSelectedDocumentModel.canEdit}"
removeButtonLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.remove']}"
removeDialogCancelLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.cancel']}"
removeDialogSubmitLabel="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.submit']}"
removeDialogText="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.text']}"
removeDialogTitle="#{SciProjectMessageBundle['basicproperties.shortdescription.remove.header']}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@remove"
title="#{SciProjectMessageBundle['basicproperties.shortdescription.header']}"
unusedLocales="#{SciProjectPropertiesStep.unusedShortDescriptionLocales}"
useTextarea="true"
values="#{SciProjectPropertiesStep.shortDescriptionValues}"
/>
</ui:define>
</ui:define>
</ui:composition>
</html>

View File

@ -146,3 +146,20 @@ funding_step.fundingtext.header.view=Description of funding
funding_step.edit=Edit
funding_step.fundingvolume.header.edit=Edit description of volume of funding
funding_step.fundingvolume.header.view=Description of the volume of funding
createstep.title=Create new research project
createform.name.help=The name of the new research project description. Also used as URL fragment.
createform.name.label=Name
createform.initial_locale.help=The initial locale of the research project description.
createform.initial_locale.label=Locale
createform.title.help=The title of the research project.
createform.title.label=Title
createform.begin.help=The begin of the project.
createform.begin.label=Begin
createform.end.help=The end of the research project.
createform.end.label=End
createform.workflow.help=The workflow to use for the research project description.
createform.workflow.label=Workflow
createform.cancel=Cancel
createform.submit=Create project
createform.summary.help=A summary of the description of the research project.
createform.summary.label=Summary

View File

@ -146,3 +146,20 @@ funding_step.fundingtext.header.view=Beschreibung der Finanzierung
funding_step.edit=Bearbeiten
funding_step.fundingvolume.header.edit=Beschreibung des Volumens der Finanzierung bearbeiten
funding_step.fundingvolume.header.view=Beschreibung des Volumens der Finanzierung
createstep.title=Neues Forschungsprojekt anlegen
createform.name.help=Der Name des neuen Forschungsprojekt-Beschreibung. Wird auch als URL-Fragment genutzt.
createform.name.label=Name
createform.initial_locale.help=Die initiale Sprache der Forschungsprojekt-Beschreibung.
createform.initial_locale.label=Sprache
createform.title.help=Der Titel des Forschungsprojektes.
createform.title.label=Titel
createform.begin.help=Der Beginn der Laufzeit des Projektes.
createform.begin.label=Beginn
createform.end.help=Der Ende der Laufzeit des Forschungsprojektes.
createform.end.label=Ende
createform.workflow.help=Der Arbeitsablauf, der f\u00fcr die Forschungsprojekt-Beschreibung genutzt werden soll.
createform.workflow.label=Arbeitsablauf
createform.cancel=Abbrechen
createform.submit=Projekt anlegen
createform.summary.help=Eine Zusammenfassung der Beschreibung des Forschungsprojektes.
createform.summary.label=Zusammenfassung

View File

@ -23,6 +23,12 @@
<url>http://www.scientificcms.org/modules/web/wildfly</url>
<dependencies>
<dependency>
<groupId>org.libreccm</groupId>
<artifactId>ccm-wildfly</artifactId>
<version>7.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
@ -232,6 +238,14 @@
<include>assets/</include>
</includes>
</overlay>
<overlay>
<groupId>org.scientificcms</groupId>
<artifactId>sci-types-project</artifactId>
<type>jar</type>
<includes>
<include>WEB-INF/</include>
</includes>
</overlay>
</overlays>
</configuration>
</plugin>

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -0,0 +1,2 @@
example.setting=Properties from the Freemarker theme.

View File

@ -0,0 +1,73 @@
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
header {
padding: 1em 2em;
}
header img {
display: block;
margin-left: auto;
margin-right: auto;
width: 20vw;
max-width: 1020px;
max-height: 566px;
}
main {
max-width: 55em;
margin-left: auto;
margin-right: auto;
padding: 2em 1em;
}
main h1 {
text-align: center;
}
main form.login {
display: flex;
align-items: center;
flex-direction: column;
margin-top: 1em;
}
main form.login .form-row {
display: flex;
align-items: flex-start;
flex-direction: column;
margin-bottom: 0.5em;
}
main form.login button[type=submit] {
display: block;
margin-top: 0.75em;
margin-left: auto;
margin-right: auto;
padding: 0.25em;
}
footer {
background-color: #71ac52;
color: #fff;
padding: 3em 1em;
width: 100vw;
}
footer p {
text-align: center;
}

View File

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html>
<head>
<title>LibreCCM Devel Theme</title>
</head>
<body>
<h1>LibreCCM Devel</h1>
<h2>Site Info</h2>
<dl>
<dt>host</dt>
<dd>${CmsPagesSiteInfoModel.host}</dd>
<dt>domain</dt>
<dd>${CmsPagesSiteInfoModel.domain}</dd>
<dt>name</dt>
<dd>${CmsPagesSiteInfoModel.name}</dd>
<dt>Current category</dt>
<dd>${CmsPagesCategoryModel.category.name}</dd>
</dl>
<h2>Category Tree</h2>
<ul>
<!--<#list CmsPagesCategoryModel.categoryTree.subCategories as category>
<@categoryTreeNode category />
</#list>-->
<@categoryTreeNode CmsPagesCategoryModel.categoryTree />
</ul>
<h2>(Index) Item</h2>
<#if (CmsPagesCategoryModel.category.hasIndexItem)>
<dl>
<dt>Name</dt>
<dd>${CmsPagesCategorizedItemModel.name}</dd>
<dt>Title</dt>
<dd>${CmsPagesCategorizedItemModel.title}</dd>
<dt>Description</dt>
<dd>${CmsPagesCategorizedItemModel.description}</dd>
</dl>
<#else>
<p>No (Index) Item</p>
</#if>
<h2>Item List</h2>
<ul>
<#list CmsPagesItemListModel.items as item>
<li>
<b>${item.title} (${item.name})</b>
${item.description}
</li>
</#list>
</ul>
</body>
</html>
<#macro categoryTreeNode category>
<li>
${category.name}
<#if (category.subCategories?size > 0)>
<ul>
<#list category.subCategories as subCategory>
<@categoryTreeNode subCategory />
</#list>
</ul>
</#if>
</li>
</#macro>

View File

@ -0,0 +1,19 @@
<footer>
<ul>
<li>
<a href="/impressum">
<!--Impressum-->
${localize("footer.impressum")}
</a>
</li>
<li>
<a href="/privacy">
<!--Privacy-->
${localize("footer.privacy")}
</a>
</li>
<li>
<code>imported</code>
</li>
</ul>
</footer>

View File

@ -0,0 +1,35 @@
<#import "../main.html.ftl" as main>
<@main.ccm_main>
<h1>${LoginMessages['login.title']}</h1>
<#if (loginFailed)>
<div class="alert-error">
${LoginMessages['login.errors.failed']}
</div>
</#if>
<form action="${mvc.uri('LoginController#processLogin')}"
class="login"
method="post">
<div class="form-row">
<label for="login">${LoginMessages['login.screenname.label']}</label>
<input id="login" name="login" required="true" type="text" />
</div>
<div class="form-row">
<label for="password">
${LoginMessages['login.password.label']}
</label>
<input id="password"
name="password"
required="true"
type="password" />
</div>
<input type="hidden"
name="returnUrl"
value="${returnUrl}" />
<button type="submit">
${LoginMessages['login.submit']}
</button>
</form>
</@main.ccm_main>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<title>Category page</title>
<link rel="stylesheet" href="${getContextPath()}/theming/ccm/style.css" />
</head>
<body>
<main>
<h1>${LoginMessages['login.password_recovered.title']}</h1>
<p>${LoginMessages['login.password_recovered.message']}</p>
</main>
<#include "footer.html.ftl">
</body>
</html>

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title>Category page</title>
<link rel="stylesheet" href="${getContextPath()}/theming/ccm/style.css" />
</head>
<body>
<main>
<h1>${LoginMessages['login.recover_password.title']}</h1>
<# if (failedToSendRecoverMessage)>
<div class="alert-error">
${LoginMessages['login.errors.failedToSendRecoverMessage']}
</div>
</#if>
<form action="${mvc.url('LoginController#recoverPassword')}"
method="post">
<label for="email">${LoginMessages['login.email.label']}</label>
<input id="email" name="email" required="true" type="text" />
<button type="submit">
${LoginMessages['login.recover_password.submit']}
</button>
</form>
</main>
<#include "footer.html.ftl">
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<title>Category page</title>
<link rel="stylesheet" href="${themeUrl}/style.css" />
</head>
<body>
<main>
<h1>Logout successful</h1>
<p>Logout successful</p>
</main>
</body>
</html>

View File

@ -0,0 +1,25 @@
<#macro ccm_main scripts=[]>
<html>
<head>
<title>Category page</title>
<link rel="stylesheet" href="${themeUrl}/styles/style.css" />
<#list scripts as script>
<script src="${themeUrl}/${script}" />
</#list>
</head>
<body>
<header>
<a href="https://www.libreccm.org">
<img alt="LibreCCM Logo"
src="${themeUrl}/images/libreccm.png" />
</a>
</header>
<main>
<#nested>
</main>
<footer>
<p>LibreCCM basic theme. The customize create your own theme.</p>
</footer>
</body>
</html>
</#macro>

View File

@ -0,0 +1,5 @@
label.critical=Critical
label.error=Error
label.ok=OK
label.warning=Warning

View File

@ -0,0 +1,3 @@
footer.impressum=Impressum
footer.privacy=Privacy

View File

@ -0,0 +1,95 @@
{
"files": [
{
"name": "images",
"isDirectory": true,
"files": [
{
"name": "libreccm.png",
"isDirectory": false,
"mimeType": "image/png"
}
]
},
{
"name": "settings.properties",
"isDirectory": false,
"mimeType": "text/plain"
},
{
"name": "styles",
"isDirectory": true,
"files": [
{
"name": "style.css",
"isDirectory": false,
"mimeType": "text/css"
}
]
},
{
"name": "templates",
"isDirectory": true,
"files": [
{
"name": "login",
"isDirectory": true,
"files": [
{
"name": "login-form.html.ftl",
"isDirectory": false,
"mimeType": "text/plain"
},
{
"name": "login-password-recovered.html.ftl",
"isDirectory": false,
"mimeType": "text/plain"
}, {
"name": "login-recover-password.html.ftl",
"isDirectory": false,
"mimeType": "text/plain"
}
]
},
{
"name": "logout",
"isDirectory": true,
"files": [
{
"name": "loggedout.html.ftl",
"isDirectory": false,
"mimeText": "text/plain"
}
]
}
]
},
{
"name": "texts",
"isDirectory": true,
"files": [
{
"name": "labels.properties",
"isDirectory": false,
"mimeType": "text/plain"
}
]
},
{
"name": "theme-bundle.properties",
"isDirectory": false,
"mimeType": "text/plain"
},
{
"name": "theme-index.json",
"isDirectory": false,
"mimeType": "application/json"
},
{
"name": "theme.json",
"isDirectory": false,
"mimeType": "application/json"
}
]
}

View File

@ -0,0 +1,144 @@
{
"name": "librecms-devel",
"type": "freemarker",
"default-template": "templates/default.html.ftl",
"mvc-templates": {
"default": {
"description": {
"values": {
"value": [
{
"lang": "en",
"value": "Default Template"
}
]
}
},
"name": "Default Template",
"path": "templates/default.html.ftl",
"title": {
"values": {
"value": [
{
"lang": "en",
"value": "Default Template"
}
]
}
}
},
"login-form": {
"description": {
"values": {
"value": [
{
"lang": "en",
"value": "Login Form"
}
]
}
},
"name": "Login Form",
"path": "templates/login/login-form.html.ftl",
"title": {
"values": {
"value": [
{
"lang": "en",
"value": "Login Form"
}
]
}
}
},
"login-recover-password": {
"description": {
"values": {
"value": [
{
"lang": "en",
"value": "Recover lost passwords"
}
]
}
},
"name": "login-recover-password",
"path": "templates/login/login-recover-password.html.ftl",
"title": {
"values": {
"value": [
{
"lang": "en",
"value": "Recover password"
}
]
}
}
},
"login-password-recovered": {
"description": {
"values": {
"value": [
{
"lang": "en",
"value": "Password recovered"
}
]
}
},
"name": "login-password-recovered",
"path": "templates/login/login-password-recovered.html.ftl",
"title": {
"values": {
"value": [
{
"lang": "en",
"value": "Password recovered"
}
]
}
}
},
"loggedout": {
"description": {
"values": {
"value": [
{
"lang": "en",
"value": "Logout successful"
}
]
}
},
"name": "loggedout",
"path": "templates/logout/loggedout.html.ftl",
"title": {
"values": {
"value": [
{
"lang": "en",
"value": "Logout succesful"
}
]
}
}
}
},
"views": {
"default": {
"default": "default",
"@default": "default"
},
"login": {
"loginForm": "login-form",
"passwordRecovered": "login-password-recovered",
"recoverPassword": "login-recover-password"
},
"logout": {
"loggedout": "loggedout"
}
}
}