Compare commits
73 Commits
Author | SHA1 | Date |
---|---|---|
Diamantis Tziotzios | e8aef281d4 | |
Diamantis Tziotzios | 00c6978594 | |
Diamantis Tziotzios | 3adb518e61 | |
Konstantina Galouni | eb74ef86b9 | |
Diamantis Tziotzios | a1ee9c82bc | |
Diamantis Tziotzios | 5e5bd39313 | |
Diamantis Tziotzios | 5e99cef60e | |
Diamantis Tziotzios | cc7edc2f49 | |
Diamantis Tziotzios | a1849c64ca | |
Diamantis Tziotzios | 192220161b | |
George Kalampokis | 87758c3e9a | |
Diamantis Tziotzios | 83342f5afa | |
Diamantis Tziotzios | 65cdb3b6ea | |
Diamantis Tziotzios | 536ba9b900 | |
Alexandros Mandilaras | 6bd3302788 | |
Diamantis Tziotzios | 4970f5812f | |
Georgios Kakaletris | 9c37e5a073 | |
Georgios Kakaletris | 444c1aacb1 | |
Diamantis Tziotzios | 50c96ef821 | |
Konstantina Galouni | 0adc7044ab | |
Konstantina Galouni | 13e62fd409 | |
Diamantis Tziotzios | 7185b5d117 | |
George Kalampokis | 5f131b9823 | |
Diamantis Tziotzios | 93320f7c94 | |
Diamantis Tziotzios | 876d99ce38 | |
George Kalampokis | 7a71110033 | |
Diamantis Tziotzios | 14c267c97e | |
Diamantis Tziotzios | b04b35d62b | |
Diamantis Tziotzios | 7a8375b988 | |
Diamantis Tziotzios | 895dbcf098 | |
Diamantis Tziotzios | bd15b1e2c7 | |
George Kalampokis | faabd343a9 | |
George Kalampokis | e5a929f259 | |
George Kalampokis | d1fc10854c | |
George Kalampokis | 2537923dc0 | |
George Kalampokis | c1adbe283a | |
George Kalampokis | 1c365a191e | |
Kristian Ntavidi | 82c5586067 | |
George Kalampokis | 04f230dff1 | |
George Kalampokis | 72d88d9db4 | |
George Kalampokis | 143a4c0214 | |
George Kalampokis | e7e5ed02b3 | |
George Kalampokis | b5fcc5971e | |
Diamantis Tziotzios | c16c35225f | |
Diamantis Tziotzios | f5d266554b | |
Diamantis Tziotzios | db31597fc0 | |
Diamantis Tziotzios | 9f5054668e | |
George Kalampokis | 38986ef67b | |
Diamantis Tziotzios | bff260b85b | |
George Kalampokis | 9519300dc4 | |
George Kalampokis | 9373d3e038 | |
dtziotzios | d971f02a94 | |
Georgios Kakaletris | d3915e26e7 | |
George Kalampokis | c028aad615 | |
Diamantis Tziotzios | 4ee39074a3 | |
Diamantis Tziotzios | 1b4952a909 | |
Diamantis Tziotzios | 3ada5a0d3d | |
Diamantis Tziotzios | 63ee865dd9 | |
Diamantis Tziotzios | 2a52138124 | |
Diamantis Tziotzios | 7cf64c18f2 | |
Diamantis Tziotzios | 71d317bab7 | |
Ioannis Kalyvas | cd8b3448f5 | |
Ioannis Kalyvas | c3d4cb6fdd | |
Ioannis Kalyvas | b0ccac191f | |
Ioannis Kalyvas | 3b1f37ef22 | |
Ioannis Kalyvas | b8e040ee94 | |
Ioannis Kalyvas | 50444a0b73 | |
Diamantis Tziotzios | 85bdb7fad1 | |
annabakouli | b2e49fbb8a | |
Diamantis Tziotzios | bfc6b63067 | |
Nikolaos Laskaris | 9941c96dc2 | |
Nikolaos Laskaris | 06272c79da | |
Nikolaos Laskaris | a00eec68d8 |
|
@ -1,3 +1,9 @@
|
||||||
|
|
||||||
|
**Important note: The deployment, troubleshooting, maintenance and operation of on-premises / self-served OpenDMP instances for development, testing or production use, shall be the sole responsibility of the adopter. No support is guaranteed by OpenDMP implentation team for issues that may be encountered during deployment, extension or operation of such installations.**
|
||||||
|
|
||||||
|
**Documentation is provided on a best-effort basis for the code and processes around the development, deployment and operation of OpenDMP. If you find any misalignment of the actual processes with the related documentation, please let us know so that the misalignment is addressed for the benefit of future adopters.**
|
||||||
|
|
||||||
|
|
||||||
# Using Docker Compose with Argos
|
# Using Docker Compose with Argos
|
||||||
|
|
||||||
ARGOS is an open extensible service that simplifies the management, validation, monitoring and maintenance and of Data Management Plans. It allows actors (researchers, managers, supervisors etc) to create actionable DMPs that may be freely exchanged among infrastructures for carrying out specific aspects of the Data management process in accordance with the intentions and commitment of Data owners.
|
ARGOS is an open extensible service that simplifies the management, validation, monitoring and maintenance and of Data Management Plans. It allows actors (researchers, managers, supervisors etc) to create actionable DMPs that may be freely exchanged among infrastructures for carrying out specific aspects of the Data management process in accordance with the intentions and commitment of Data owners.
|
||||||
|
|
|
@ -226,6 +226,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<version>1.5.9.RELEASE</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
|
|
@ -202,14 +202,14 @@ public class DashBoardManager {
|
||||||
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
|
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
|
||||||
.whenComplete((datasetActivities, throwable) -> activity.setRecentDatasetActivities(datasetActivities));
|
.whenComplete((datasetActivities, throwable) -> activity.setRecentDatasetActivities(datasetActivities));
|
||||||
|
|
||||||
CompletableFuture<List<RecentActivityData>> grants = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user)
|
/*CompletableFuture<List<RecentActivityData>> grants = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user)
|
||||||
.withHint("grantRecentActivity")
|
.withHint("grantRecentActivity")
|
||||||
.orderBy((builder, root) -> builder.desc(root.get("modified")))
|
.orderBy((builder, root) -> builder.desc(root.get("modified")))
|
||||||
.take(numberofactivities)
|
.take(numberofactivities)
|
||||||
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
|
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
|
||||||
.whenComplete((grantActivities, throwable) -> activity.setRecentGrantActivities(grantActivities));
|
.whenComplete((grantActivities, throwable) -> activity.setRecentGrantActivities(grantActivities));*/
|
||||||
|
|
||||||
CompletableFuture.allOf(grants, dmps, datasets).join();
|
CompletableFuture.allOf(/*grants, */dmps, datasets).join();
|
||||||
return activity;
|
return activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -544,6 +544,14 @@ public class DataManagementPlanManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(newDmp.getId() != null){
|
if(newDmp.getId() != null){
|
||||||
|
UUID dmpId = newDmp.getId();
|
||||||
|
List<DMPDatasetProfile> dmpDatasetProfiles = apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().asQueryable()
|
||||||
|
.where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList();
|
||||||
|
for (DMPDatasetProfile dmpDatasetProfile : dmpDatasetProfiles) {
|
||||||
|
if (newDmp.getAssociatedDmps().stream().filter(dmpDatasetProfile1 -> dmpDatasetProfile1.getId() != null).noneMatch(dmpDatasetProfile1 -> dmpDatasetProfile1.getId().equals(dmpDatasetProfile.getId()))) {
|
||||||
|
apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().delete(dmpDatasetProfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
for(DMPDatasetProfile dmpDatasetProfile : newDmp.getAssociatedDmps()){
|
for(DMPDatasetProfile dmpDatasetProfile : newDmp.getAssociatedDmps()){
|
||||||
apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().createOrUpdate(dmpDatasetProfile);
|
apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().createOrUpdate(dmpDatasetProfile);
|
||||||
}
|
}
|
||||||
|
@ -1362,7 +1370,7 @@ public class DataManagementPlanManager {
|
||||||
DataManagementPlanBlueprintListingModel dmpBlueprintModel = new DataManagementPlanBlueprintListingModel();
|
DataManagementPlanBlueprintListingModel dmpBlueprintModel = new DataManagementPlanBlueprintListingModel();
|
||||||
dmpBlueprintModel.fromDataModel(dmpProfile);
|
dmpBlueprintModel.fromDataModel(dmpProfile);
|
||||||
DataManagementPlanBlueprint dmpBlueprint = dmpBlueprintModel.getDefinition();
|
DataManagementPlanBlueprint dmpBlueprint = dmpBlueprintModel.getDefinition();
|
||||||
for(Section section: dmpBlueprint.getSections()){
|
for(Section section: dmpBlueprint.getSections()) {
|
||||||
wordBuilder.addParagraphContent(section.getOrdinal() + ". " + section.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO, 0);
|
wordBuilder.addParagraphContent(section.getOrdinal() + ". " + section.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO, 0);
|
||||||
// XWPFParagraph sectionInfoParagraph = document.createParagraph();
|
// XWPFParagraph sectionInfoParagraph = document.createParagraph();
|
||||||
// sectionInfoParagraph.setSpacingBetween(1.0);
|
// sectionInfoParagraph.setSpacingBetween(1.0);
|
||||||
|
@ -1382,14 +1390,14 @@ public class DataManagementPlanManager {
|
||||||
|
|
||||||
//wordBuilder.addParagraphContent("Section Fields", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0);
|
//wordBuilder.addParagraphContent("Section Fields", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0);
|
||||||
section.getFields().sort(Comparator.comparingInt(FieldModel::getOrdinal));
|
section.getFields().sort(Comparator.comparingInt(FieldModel::getOrdinal));
|
||||||
for(FieldModel field: section.getFields()){
|
for (FieldModel field : section.getFields()) {
|
||||||
if(field.getCategory() == FieldCategory.SYSTEM){
|
if (field.getCategory() == FieldCategory.SYSTEM) {
|
||||||
SystemField systemField = field.toSystemField();
|
SystemField systemField = field.toSystemField();
|
||||||
if (systemField.getType() == SystemFieldType.LANGUAGE) continue;
|
if (systemField.getType() == SystemFieldType.LANGUAGE) continue;
|
||||||
XWPFParagraph systemFieldParagraph = document.createParagraph();
|
XWPFParagraph systemFieldParagraph = document.createParagraph();
|
||||||
// systemFieldParagraph.setSpacingBetween(1.0);
|
// systemFieldParagraph.setSpacingBetween(1.0);
|
||||||
XWPFRun runSyStemFieldTitle = systemFieldParagraph.createRun();
|
XWPFRun runSyStemFieldTitle = systemFieldParagraph.createRun();
|
||||||
runSyStemFieldTitle.setText(systemField.getLabel() +": ");
|
runSyStemFieldTitle.setText(systemField.getLabel() + ": ");
|
||||||
runSyStemFieldTitle.setColor("000000");
|
runSyStemFieldTitle.setColor("000000");
|
||||||
// XWPFRun runSystemFieldTitleText = systemFieldParagraph.createRun();
|
// XWPFRun runSystemFieldTitleText = systemFieldParagraph.createRun();
|
||||||
// runSystemFieldTitleText.setText(systemField.getLabel());
|
// runSystemFieldTitleText.setText(systemField.getLabel());
|
||||||
|
@ -1419,18 +1427,18 @@ public class DataManagementPlanManager {
|
||||||
wordBuilder.addParagraphContent(dmpEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0);
|
wordBuilder.addParagraphContent(dmpEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0);
|
||||||
break;
|
break;
|
||||||
case RESEARCHERS:
|
case RESEARCHERS:
|
||||||
for(Researcher researcher: dmpEntity.getResearchers()){
|
for (Researcher researcher : dmpEntity.getResearchers()) {
|
||||||
XWPFRun runResearcher = systemFieldParagraph.createRun();
|
XWPFRun runResearcher = systemFieldParagraph.createRun();
|
||||||
runResearcher.addBreak();
|
runResearcher.addBreak();
|
||||||
runResearcher.setText("• " + researcher.getLabel());
|
runResearcher.setText(researcher.getLabel());
|
||||||
runResearcher.setColor("116a78");
|
runResearcher.setColor("116a78");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ORGANIZATIONS:
|
case ORGANIZATIONS:
|
||||||
for(Organisation organisation: dmpEntity.getOrganisations()){
|
for (Organisation organisation : dmpEntity.getOrganisations()) {
|
||||||
XWPFRun runOrganisation = systemFieldParagraph.createRun();
|
XWPFRun runOrganisation = systemFieldParagraph.createRun();
|
||||||
runOrganisation.addBreak();
|
runOrganisation.addBreak();
|
||||||
runOrganisation.setText("• " + organisation.getLabel());
|
runOrganisation.setText(organisation.getLabel());
|
||||||
runOrganisation.setColor("116a78");
|
runOrganisation.setColor("116a78");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1459,7 +1467,7 @@ public class DataManagementPlanManager {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PROJECT:
|
case PROJECT:
|
||||||
if (dmpEntity.getProject() != null ) {
|
if (dmpEntity.getProject() != null) {
|
||||||
XWPFRun runProject = systemFieldParagraph.createRun();
|
XWPFRun runProject = systemFieldParagraph.createRun();
|
||||||
runProject.setText(dmpEntity.getProject().getLabel());
|
runProject.setText(dmpEntity.getProject().getLabel());
|
||||||
runProject.setColor("116a78");
|
runProject.setColor("116a78");
|
||||||
|
@ -1469,7 +1477,7 @@ public class DataManagementPlanManager {
|
||||||
Map extraProperties = objectMapper.readValue(dmpEntity.getExtraProperties(), HashMap.class);
|
Map extraProperties = objectMapper.readValue(dmpEntity.getExtraProperties(), HashMap.class);
|
||||||
if (extraProperties.containsKey("license")) {
|
if (extraProperties.containsKey("license")) {
|
||||||
Map<String, String> license = ((Map<String, String>) extraProperties.get("license"));
|
Map<String, String> license = ((Map<String, String>) extraProperties.get("license"));
|
||||||
if(!StringUtils.isEmpty(license.get("pid"))) {
|
if (license != null && !StringUtils.isEmpty(license.get("pid"))) {
|
||||||
XWPFRun runLicense = systemFieldParagraph.createRun();
|
XWPFRun runLicense = systemFieldParagraph.createRun();
|
||||||
runLicense.setText(license.get("pid").toString());
|
runLicense.setText(license.get("pid").toString());
|
||||||
runLicense.setColor("116a78");
|
runLicense.setColor("116a78");
|
||||||
|
@ -1486,11 +1494,11 @@ public class DataManagementPlanManager {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//document.createParagraph();
|
//document.createParagraph();
|
||||||
}
|
} else if (field.getCategory() == FieldCategory.EXTRA) {
|
||||||
else if(field.getCategory() == FieldCategory.EXTRA){
|
|
||||||
|
|
||||||
Map dmpProperties = objectMapper.readValue(dmpEntity.getProperties(), HashMap.class);
|
Map dmpProperties = objectMapper.readValue(dmpEntity.getProperties(), HashMap.class);
|
||||||
if (dmpProperties != null && (!dmpProperties.containsKey(field.getId().toString()) || StringUtils.isEmpty((String) dmpProperties.get(field.getId().toString())))) continue;
|
if (dmpProperties != null && (!dmpProperties.containsKey(field.getId().toString()) || StringUtils.isEmpty((String) dmpProperties.get(field.getId().toString()))))
|
||||||
|
continue;
|
||||||
ExtraField extraField = field.toExtraField();
|
ExtraField extraField = field.toExtraField();
|
||||||
XWPFParagraph extraFieldParagraph = document.createParagraph();
|
XWPFParagraph extraFieldParagraph = document.createParagraph();
|
||||||
extraFieldParagraph.setSpacingBetween(1.0);
|
extraFieldParagraph.setSpacingBetween(1.0);
|
||||||
|
@ -1527,76 +1535,78 @@ public class DataManagementPlanManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
//if(!section.getDescriptionTemplates().isEmpty()){
|
//if(!section.getDescriptionTemplates().isEmpty()){
|
||||||
wordBuilder.addParagraphContent("Section descriptions", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0);
|
final Boolean isFinalized = dmpEntity.getStatus() == DMP.DMPStatus.FINALISED.getValue();
|
||||||
// wordBuilder.addParagraphContent("Description Templates", document, ParagraphStyle.HEADER4, BigInteger.ZERO, 0);
|
final Boolean isPublic = dmpEntity.isPublic();
|
||||||
// for(eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DescriptionTemplate descriptionTemplate: section.getDescriptionTemplates()){
|
List<Dataset> datasets = dmpEntity.getDataset().stream()
|
||||||
// XWPFParagraph templateParagraph = document.createParagraph();
|
.filter(item -> item.getStatus() != Dataset.Status.CANCELED.getValue())
|
||||||
// XWPFRun runTemplateLabel = templateParagraph.createRun();
|
.filter(item -> item.getStatus() != Dataset.Status.DELETED.getValue())
|
||||||
// runTemplateLabel.setText("• " + descriptionTemplate.getLabel());
|
.filter(item -> !isPublic && !isFinalized || item.getStatus() == Dataset.Status.FINALISED.getValue())
|
||||||
// runTemplateLabel.setColor("116a78");
|
.filter(item -> item.getDmpSectionIndex().equals(section.getOrdinal() - 1))
|
||||||
// }
|
.sorted(Comparator.comparing(Dataset::getCreated)).collect(Collectors.toList());
|
||||||
|
|
||||||
final Boolean isFinalized = dmpEntity.getStatus() == DMP.DMPStatus.FINALISED.getValue();
|
if (datasets.size() > 0)
|
||||||
final Boolean isPublic = dmpEntity.isPublic();
|
wordBuilder.addParagraphContent("Descriptions", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0);
|
||||||
dmpEntity.getDataset().stream()
|
for (Dataset datasetEntity : datasets) {
|
||||||
.filter(item -> item.getStatus() != Dataset.Status.CANCELED.getValue())
|
|
||||||
.filter(item -> item.getStatus() != Dataset.Status.DELETED.getValue())
|
|
||||||
.filter(item -> !isPublic && !isFinalized || item.getStatus() == Dataset.Status.FINALISED.getValue())
|
Map<String, Object> properties = new HashMap<>();
|
||||||
.filter(item -> item.getDmpSectionIndex().equals(section.getOrdinal() - 1))
|
if (datasetEntity.getProperties() != null) {
|
||||||
.sorted(Comparator.comparing(Dataset::getCreated))
|
//ObjectMapper objectMapper = new ObjectMapper();
|
||||||
.forEach(datasetEntity -> {
|
try {
|
||||||
Map<String, Object> properties = new HashMap<>();
|
properties = objectMapper.readValue(datasetEntity.getProperties(), LinkedHashMap.class);
|
||||||
if (datasetEntity.getProperties() != null) {
|
} catch (IOException e) {
|
||||||
//ObjectMapper objectMapper = new ObjectMapper();
|
logger.error(e.getLocalizedMessage(), e);
|
||||||
try {
|
}
|
||||||
properties = objectMapper.readValue(datasetEntity.getProperties(), LinkedHashMap.class);
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e.getLocalizedMessage(), e);
|
|
||||||
}
|
|
||||||
/*JSONObject jObject = new JSONObject(datasetEntity.getProperties());
|
/*JSONObject jObject = new JSONObject(datasetEntity.getProperties());
|
||||||
properties = jObject.toMap();*/
|
properties = jObject.toMap();*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Dataset Description custom style.
|
// Dataset Description custom style.
|
||||||
XWPFParagraph datasetDescriptionParagraph = document.createParagraph();
|
XWPFParagraph datasetDescriptionParagraph = document.createParagraph();
|
||||||
datasetDescriptionParagraph.setStyle("Heading4");
|
datasetDescriptionParagraph.setStyle("Heading4");
|
||||||
datasetDescriptionParagraph.setSpacingBetween(1.5);
|
datasetDescriptionParagraph.setSpacingBetween(1.5);
|
||||||
XWPFRun datasetDescriptionRun = datasetDescriptionParagraph.createRun();
|
XWPFRun datasetDescriptionRun = datasetDescriptionParagraph.createRun();
|
||||||
datasetDescriptionRun.setText("Description");
|
datasetDescriptionRun.setText(datasetEntity.getLabel());
|
||||||
//datasetDescriptionRun.setColor("2E75B6");
|
//datasetDescriptionRun.setColor("2E75B6");
|
||||||
//datasetDescriptionRun.setBold(true);
|
//datasetDescriptionRun.setBold(true);
|
||||||
datasetDescriptionRun.setFontSize(15);
|
datasetDescriptionRun.setFontSize(15);
|
||||||
|
|
||||||
|
|
||||||
// Custom style for the Dataset title.
|
// Custom style for the Dataset title.
|
||||||
//wordBuilder.addParagraphContent("Title: " + datasetEntity.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO);
|
//wordBuilder.addParagraphContent("Title: " + datasetEntity.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO);
|
||||||
XWPFParagraph datasetLabelParagraph = document.createParagraph();
|
// XWPFParagraph datasetLabelParagraph = document.createParagraph();
|
||||||
// datasetLabelParagraph.setStyle("Heading2");
|
//// datasetLabelParagraph.setStyle("Heading2");
|
||||||
datasetLabelParagraph.setSpacingBetween(1.0);
|
// datasetLabelParagraph.setSpacingBetween(1.0);
|
||||||
XWPFRun runDatasetTitle1 = datasetLabelParagraph.createRun();
|
// XWPFRun runDatasetTitle1 = datasetLabelParagraph.createRun();
|
||||||
runDatasetTitle1.setText("Title: ");
|
// runDatasetTitle1.setText("Title: ");
|
||||||
runDatasetTitle1.setColor("000000");
|
// runDatasetTitle1.setColor("000000");
|
||||||
//runDatasetTitle1.setBold(true);
|
// //runDatasetTitle1.setBold(true);
|
||||||
//runDatasetTitle1.setFontSize(12);
|
// //runDatasetTitle1.setFontSize(12);
|
||||||
XWPFRun runDatasetTitle = datasetLabelParagraph.createRun();
|
// XWPFRun runDatasetTitle = datasetLabelParagraph.createRun();
|
||||||
runDatasetTitle.setText(datasetEntity.getLabel());
|
// runDatasetTitle.setText(datasetEntity.getLabel());
|
||||||
runDatasetTitle.setColor("116a78");
|
// runDatasetTitle.setColor("116a78");
|
||||||
//runDatasetTitle.setBold(true);
|
//runDatasetTitle.setBold(true);
|
||||||
//runDatasetTitle.setFontSize(12);
|
//runDatasetTitle.setFontSize(12);
|
||||||
|
|
||||||
XWPFParagraph datasetTemplateParagraph = document.createParagraph();
|
XWPFParagraph descriptionParagraph = document.createParagraph();
|
||||||
|
// XWPFRun descriptionParagraphRun = descriptionParagraph.createRun();
|
||||||
|
// descriptionParagraphRun.setText("Description: ");
|
||||||
|
// descriptionParagraphRun.setColor("000000");
|
||||||
|
wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0);
|
||||||
|
|
||||||
|
XWPFParagraph datasetTemplateParagraph = document.createParagraph();
|
||||||
// datasetTemplateParagraph.setStyle("Heading3");
|
// datasetTemplateParagraph.setStyle("Heading3");
|
||||||
XWPFRun runDatasetTemplate1 = datasetTemplateParagraph.createRun();
|
XWPFRun runDatasetTemplate1 = datasetTemplateParagraph.createRun();
|
||||||
runDatasetTemplate1.setText("Template: ");
|
runDatasetTemplate1.setText("Template: ");
|
||||||
runDatasetTemplate1.setColor("000000");
|
runDatasetTemplate1.setColor("000000");
|
||||||
//runDatasetTemplate1.setBold(true);
|
//runDatasetTemplate1.setBold(true);
|
||||||
//runDatasetTemplate1.setFontSize(12);
|
//runDatasetTemplate1.setFontSize(12);
|
||||||
XWPFRun runDatasetTemplate = datasetTemplateParagraph.createRun();
|
XWPFRun runDatasetTemplate = datasetTemplateParagraph.createRun();
|
||||||
runDatasetTemplate.setText(datasetEntity.getProfile().getLabel());
|
runDatasetTemplate.setText(datasetEntity.getProfile().getLabel());
|
||||||
runDatasetTemplate.setColor("116a78");
|
runDatasetTemplate.setColor("116a78");
|
||||||
//runDatasetTemplate.setBold(true);
|
//runDatasetTemplate.setBold(true);
|
||||||
//runDatasetTemplate.setFontSize(12);
|
//runDatasetTemplate.setFontSize(12);
|
||||||
|
|
||||||
// /*XWPFParagraph externalReferencesParagraph = document.createParagraph();
|
// /*XWPFParagraph externalReferencesParagraph = document.createParagraph();
|
||||||
// externalReferencesParagraph.setStyle("Heading3");
|
// externalReferencesParagraph.setStyle("Heading3");
|
||||||
|
@ -1634,29 +1644,29 @@ public class DataManagementPlanManager {
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
XWPFParagraph datasetDescParagraph = document.createParagraph();
|
XWPFParagraph datasetDescParagraph = document.createParagraph();
|
||||||
XWPFRun runDatasetDescription1 = datasetDescParagraph.createRun();
|
XWPFRun runDatasetDescription1 = datasetDescParagraph.createRun();
|
||||||
runDatasetDescription1.setText("Description: ");
|
runDatasetDescription1.setText("Type: ");
|
||||||
runDatasetDescription1.setColor("000000");
|
runDatasetDescription1.setColor("000000");
|
||||||
XWPFRun runDatasetDescription = datasetDescParagraph.createRun();
|
XWPFRun runDatasetDescription = datasetDescParagraph.createRun();
|
||||||
runDatasetDescription.setText(datasetEntity.getProfile().getLabel());
|
runDatasetDescription.setText(datasetEntity.getProfile().getType().getName());
|
||||||
runDatasetDescription.setColor("116a78");
|
runDatasetDescription.setColor("116a78");
|
||||||
//wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0);
|
//wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0);
|
||||||
|
|
||||||
document.createParagraph();
|
document.createParagraph();
|
||||||
|
|
||||||
PagedDatasetProfile pagedDatasetProfile = datasetManager.getPagedProfile(dataset, datasetEntity);
|
PagedDatasetProfile pagedDatasetProfile = datasetManager.getPagedProfile(dataset, datasetEntity);
|
||||||
visibilityRuleService.setProperties(properties);
|
visibilityRuleService.setProperties(properties);
|
||||||
visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules());
|
visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules());
|
||||||
try {
|
try {
|
||||||
wordBuilder.build(document, pagedDatasetProfile, visibilityRuleService);
|
wordBuilder.build(document, pagedDatasetProfile, visibilityRuleService);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error(e.getMessage(), e);
|
logger.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
// Page break at the end of the Dataset.
|
// Page break at the end of the Dataset.
|
||||||
XWPFParagraph parBreakDataset = document.createParagraph();
|
XWPFParagraph parBreakDataset = document.createParagraph();
|
||||||
parBreakDataset.setPageBreak(true);
|
parBreakDataset.setPageBreak(true);
|
||||||
});
|
}
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1797,7 +1807,7 @@ public class DataManagementPlanManager {
|
||||||
|
|
||||||
// Funder.
|
// Funder.
|
||||||
Element funder = xmlDoc.createElement("funder");
|
Element funder = xmlDoc.createElement("funder");
|
||||||
if (this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.GRANT, principal) && this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.FUNDER, principal)) {
|
if (this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.GRANT, principal) && this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.FUNDER, principal) && dmp.getGrant() != null) {
|
||||||
Element funderLabel = xmlDoc.createElement("label");
|
Element funderLabel = xmlDoc.createElement("label");
|
||||||
Element funderId = xmlDoc.createElement("id");
|
Element funderId = xmlDoc.createElement("id");
|
||||||
funderLabel.setTextContent(dmp.getGrant().getFunder().getLabel());
|
funderLabel.setTextContent(dmp.getGrant().getFunder().getLabel());
|
||||||
|
@ -1815,7 +1825,7 @@ public class DataManagementPlanManager {
|
||||||
dmpElement.appendChild(funder);
|
dmpElement.appendChild(funder);
|
||||||
// Grant.
|
// Grant.
|
||||||
Element grant = xmlDoc.createElement("grant");
|
Element grant = xmlDoc.createElement("grant");
|
||||||
if (this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.GRANT, principal)) {
|
if (this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.GRANT, principal) && dmp.getGrant() != null) {
|
||||||
Element grantLabel = xmlDoc.createElement("label");
|
Element grantLabel = xmlDoc.createElement("label");
|
||||||
Element grantId = xmlDoc.createElement("id");
|
Element grantId = xmlDoc.createElement("id");
|
||||||
grantLabel.setTextContent(dmp.getGrant().getLabel());
|
grantLabel.setTextContent(dmp.getGrant().getLabel());
|
||||||
|
@ -1833,7 +1843,7 @@ public class DataManagementPlanManager {
|
||||||
dmpElement.appendChild(grant);
|
dmpElement.appendChild(grant);
|
||||||
// Project.
|
// Project.
|
||||||
Element project = xmlDoc.createElement("project");
|
Element project = xmlDoc.createElement("project");
|
||||||
if (this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.PROJECT, principal)) {
|
if (this.dataManagementProfileManager.fieldInBlueprint(dmp.getProfile(), SystemFieldType.PROJECT, principal) && dmp.getProject() != null) {
|
||||||
Element projectId = xmlDoc.createElement("id");
|
Element projectId = xmlDoc.createElement("id");
|
||||||
Element projectLabel = xmlDoc.createElement("label");
|
Element projectLabel = xmlDoc.createElement("label");
|
||||||
Element projectDescription = xmlDoc.createElement("description");
|
Element projectDescription = xmlDoc.createElement("description");
|
||||||
|
@ -2276,6 +2286,11 @@ public class DataManagementPlanManager {
|
||||||
dmp.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList()));
|
dmp.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList()));
|
||||||
this.updateIndex(dmp);
|
this.updateIndex(dmp);
|
||||||
}
|
}
|
||||||
|
for(DMPDatasetProfile dmpDatasetProfile : dmp.getAssociatedDmps()){
|
||||||
|
dmpDatasetProfile.setDmp(dmp);
|
||||||
|
apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().createOrUpdate(dmpDatasetProfile);
|
||||||
|
}
|
||||||
|
|
||||||
dmp.getDataset().forEach(dataset -> {
|
dmp.getDataset().forEach(dataset -> {
|
||||||
dataset.setStatus(Dataset.Status.SAVED.getValue());
|
dataset.setStatus(Dataset.Status.SAVED.getValue());
|
||||||
dataset.setCreated(new Date());
|
dataset.setCreated(new Date());
|
||||||
|
|
|
@ -135,6 +135,17 @@ public class DataManagementProfileManager {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Integer> sectionIndexesForDescriptionTemplate(DMPProfile dmpProfile, UUID descriptionTemplateId) {
|
||||||
|
DataManagementPlanBlueprintListingModel dmpBlueprint = new DataManagementPlanBlueprintListingModel();
|
||||||
|
dmpBlueprint.fromDataModel(dmpProfile);
|
||||||
|
List<Integer> sectionIndexes = new ArrayList<>();
|
||||||
|
for(int i = 0; i < dmpBlueprint.getDefinition().getSections().size(); i++) {
|
||||||
|
Section section = dmpBlueprint.getDefinition().getSections().get(i);
|
||||||
|
if(section.getHasTemplates() && section.getDescriptionTemplates().stream().anyMatch(x -> x.getDescriptionTemplateId().equals(descriptionTemplateId))) sectionIndexes.add(i);
|
||||||
|
}
|
||||||
|
return sectionIndexes;
|
||||||
|
}
|
||||||
|
|
||||||
public List<DataManagementPlanProfileListingModel> getWithCriteria(DataManagementPlanProfileCriteriaRequest dataManagementPlanProfileCriteriaRequest) throws IllegalAccessException, InstantiationException {
|
public List<DataManagementPlanProfileListingModel> getWithCriteria(DataManagementPlanProfileCriteriaRequest dataManagementPlanProfileCriteriaRequest) throws IllegalAccessException, InstantiationException {
|
||||||
QueryableList<DMPProfile> items = databaseRepository.getDmpProfileDao().getWithCriteria(dataManagementPlanProfileCriteriaRequest.getCriteria());
|
QueryableList<DMPProfile> items = databaseRepository.getDmpProfileDao().getWithCriteria(dataManagementPlanProfileCriteriaRequest.getCriteria());
|
||||||
List<DataManagementPlanProfileListingModel> datamanagementPlans = items.select(item -> new DataManagementPlanProfileListingModel().fromDataModel(item));
|
List<DataManagementPlanProfileListingModel> datamanagementPlans = items.select(item -> new DataManagementPlanProfileListingModel().fromDataModel(item));
|
||||||
|
|
|
@ -140,6 +140,7 @@ public class GrantManager {
|
||||||
|
|
||||||
grants.add(grant);
|
grants.add(grant);
|
||||||
}
|
}
|
||||||
|
grants = grants.stream().filter(grant -> grant.getLabel() != null).collect(Collectors.toList());
|
||||||
grants.sort(Comparator.comparing(Grant::getLabel));
|
grants.sort(Comparator.comparing(Grant::getLabel));
|
||||||
grants = grants.stream().filter(listHelper.distinctByKey(Grant::getLabel)).collect(Collectors.toList());
|
grants = grants.stream().filter(listHelper.distinctByKey(Grant::getLabel)).collect(Collectors.toList());
|
||||||
return grants;
|
return grants;
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||||
import org.apache.poi.util.Units;
|
import org.apache.poi.util.Units;
|
||||||
import org.apache.poi.xwpf.usermodel.*;
|
import org.apache.poi.xwpf.usermodel.*;
|
||||||
import org.apache.xmlbeans.XmlCursor;
|
import org.apache.xmlbeans.XmlCursor;
|
||||||
|
import org.apache.xmlbeans.XmlObject;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.jsoup.Jsoup;
|
import org.jsoup.Jsoup;
|
||||||
|
@ -1019,60 +1020,44 @@ public class WordBuilder {
|
||||||
int descrParPos = -1;
|
int descrParPos = -1;
|
||||||
XWPFParagraph descrPar = null;
|
XWPFParagraph descrPar = null;
|
||||||
for(XWPFParagraph p: document.getParagraphs()){
|
for(XWPFParagraph p: document.getParagraphs()){
|
||||||
List<XWPFRun> runs = p.getRuns();
|
|
||||||
if(runs != null){
|
|
||||||
for(XWPFRun r : runs){
|
|
||||||
String text = r.getText(0);
|
|
||||||
if(text != null){
|
|
||||||
if(text.contains("{ARGOS.DMP.TITLE}")) {
|
|
||||||
text = text.replace("{ARGOS.DMP.TITLE}", dmpEntity.getLabel());
|
|
||||||
r.setText(text, 0);
|
|
||||||
} else if(text.contains("{ARGOS.DMP.VERSION}")) {
|
|
||||||
text = text.replace("{ARGOS.DMP.VERSION}", "Version " + dmpEntity.getVersion());
|
|
||||||
r.setText(text, 0);
|
|
||||||
} else if(datasetEntity != null && text.contains("{ARGOS.DATASET.TITLE}")) {
|
|
||||||
text = text.replace("{ARGOS.DATASET.TITLE}", datasetEntity.getLabel());
|
|
||||||
r.setText(text, 0);
|
|
||||||
// } else if(text.equals("Description") && ((!isDataset && (dmpEntity == null || dmpEntity.getDescription() != null)) || (isDataset && (datasetEntity == null || datasetEntity.getDescription() == null)))) {
|
|
||||||
// r.setText("", 0);
|
|
||||||
} else if((dmpEntity != null && text.contains("{ARGOS.DMP.DESCRIPTION}") && !isDataset) || (datasetEntity != null && text.contains("{ARGOS.DATASET.DESCRIPTION}") && isDataset)) {
|
|
||||||
descrParPos = parPos;
|
|
||||||
descrPar = p;
|
|
||||||
if(dmpEntity != null && !isDataset) {
|
|
||||||
text = text.replace("{ARGOS.DMP.DESCRIPTION}", "");
|
|
||||||
} else if(datasetEntity != null && isDataset) {
|
|
||||||
text = text.replace("{ARGOS.DATASET.DESCRIPTION}", "");
|
|
||||||
}
|
|
||||||
r.setText(text, 0);
|
|
||||||
} else if(text.equals("{ARGOS.DMP.RESEARCHERS}")) {
|
|
||||||
String researchersNames = "";
|
|
||||||
Set<Researcher> researchers = dmpEntity.getResearchers();
|
|
||||||
int i = 0;
|
|
||||||
for(Researcher researcher : researchers){
|
|
||||||
i++;
|
|
||||||
researchersNames += researcher.getLabel() + (i < researchers.size() ? ", " : "");
|
|
||||||
}
|
|
||||||
text = text.replace("{ARGOS.DMP.RESEARCHERS}", researchersNames);
|
|
||||||
r.setText(text, 0);
|
|
||||||
r.setFontSize(17);
|
|
||||||
} else if(text.equals("{ARGOS.DMP.ORGANIZATIONS}")) {
|
|
||||||
String organisationsNames = "";
|
|
||||||
Set<Organisation> organisations = dmpEntity.getOrganisations();
|
|
||||||
int i = 0;
|
|
||||||
for(Organisation organisation : organisations){
|
|
||||||
i++;
|
|
||||||
organisationsNames += organisation.getLabel() + (i < organisations.size() ? ", " : "");
|
|
||||||
}
|
|
||||||
text = text.replace("{ARGOS.DMP.ORGANIZATIONS}", organisationsNames);
|
|
||||||
r.setText(text, 0);
|
|
||||||
r.setFontSize(17);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parPos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if( dmpEntity != null) {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.TITLE}'", dmpEntity.getLabel());
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.VERSION}'", "Version " + dmpEntity.getVersion());
|
||||||
|
}
|
||||||
|
if( datasetEntity != null) {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DATASET.TITLE}'", datasetEntity.getLabel());
|
||||||
|
}
|
||||||
|
|
||||||
|
String researchersNames = "";
|
||||||
|
Set<Researcher> researchers = dmpEntity.getResearchers();
|
||||||
|
int i = 0;
|
||||||
|
for(Researcher researcher : researchers){
|
||||||
|
i++;
|
||||||
|
researchersNames += researcher.getLabel() + (i < researchers.size() ? ", " : "");
|
||||||
|
}
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.RESEARCHERS}'", researchersNames, 15);
|
||||||
|
|
||||||
|
String organisationsNames = "";
|
||||||
|
Set<Organisation> organisations = dmpEntity.getOrganisations();
|
||||||
|
i = 0;
|
||||||
|
for(Organisation organisation : organisations){
|
||||||
|
i++;
|
||||||
|
organisationsNames += organisation.getLabel() + (i < organisations.size() ? ", " : "");
|
||||||
|
}
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.ORGANIZATIONS}'", organisationsNames, 15);
|
||||||
|
|
||||||
|
if(this.textSegmentExists(p,"'{ARGOS.DMP.DESCRIPTION}'")) {
|
||||||
|
descrParPos = parPos;
|
||||||
|
descrPar = p;
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.DESCRIPTION}'", "");
|
||||||
|
}
|
||||||
|
if(this.textSegmentExists(p,"'{ARGOS.DATASET.DESCRIPTION}'")) {
|
||||||
|
descrParPos = parPos;
|
||||||
|
descrPar = p;
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DATASET.DESCRIPTION}'", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
if((descrParPos != -1) && (dmpEntity!=null) && (dmpEntity.getDescription() != null) && !isDataset) {
|
if((descrParPos != -1) && (dmpEntity!=null) && (dmpEntity.getDescription() != null) && !isDataset) {
|
||||||
XmlCursor cursor = descrPar.getCTP().newCursor();
|
XmlCursor cursor = descrPar.getCTP().newCursor();
|
||||||
cursor.toNextSibling();
|
cursor.toNextSibling();
|
||||||
|
@ -1096,7 +1081,7 @@ public class WordBuilder {
|
||||||
XWPFParagraph p = it.next().getCell(0).getParagraphs().get(0);
|
XWPFParagraph p = it.next().getCell(0).getParagraphs().get(0);
|
||||||
XWPFRun run = p.createRun();
|
XWPFRun run = p.createRun();
|
||||||
run.setText(dmpEntity.getGrant().getFunder().getLabel());
|
run.setText(dmpEntity.getGrant().getFunder().getLabel());
|
||||||
run.setFontSize(17);
|
run.setFontSize(15);
|
||||||
p.setAlignment(ParagraphAlignment.CENTER);
|
p.setAlignment(ParagraphAlignment.CENTER);
|
||||||
}
|
}
|
||||||
it = tbl.getRows().iterator();
|
it = tbl.getRows().iterator();
|
||||||
|
@ -1111,7 +1096,7 @@ public class WordBuilder {
|
||||||
text += parts.length > 1 ? "/ No "+parts[parts.length - 1] : "";
|
text += parts.length > 1 ? "/ No "+parts[parts.length - 1] : "";
|
||||||
}
|
}
|
||||||
run.setText(text);
|
run.setText(text);
|
||||||
run.setFontSize(17);
|
run.setFontSize(15);
|
||||||
p.setAlignment(ParagraphAlignment.CENTER);
|
p.setAlignment(ParagraphAlignment.CENTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1119,43 +1104,165 @@ public class WordBuilder {
|
||||||
public void fillFooter(DMP dmpEntity, Dataset datasetEntity, XWPFDocument document, boolean isDataset) {
|
public void fillFooter(DMP dmpEntity, Dataset datasetEntity, XWPFDocument document, boolean isDataset) {
|
||||||
document.getFooterList().forEach(xwpfFooter -> {
|
document.getFooterList().forEach(xwpfFooter -> {
|
||||||
List<XWPFRun> runs = xwpfFooter.getParagraphs().get(0).getRuns();
|
List<XWPFRun> runs = xwpfFooter.getParagraphs().get(0).getRuns();
|
||||||
if(runs != null){
|
for(XWPFParagraph p : xwpfFooter.getParagraphs()){
|
||||||
for(XWPFRun r : runs){
|
if(p != null){
|
||||||
String text = r.getText(0);
|
if( dmpEntity != null) {
|
||||||
if(text != null){
|
this.replaceTextSegment(p, "'{ARGOS.DMP.TITLE}'", dmpEntity.getLabel());
|
||||||
if(text.contains("{ARGOS.DMP.TITLE}")){
|
|
||||||
text = text.replace("{ARGOS.DMP.TITLE}", dmpEntity.getLabel());
|
|
||||||
r.setText(text, 0);
|
|
||||||
}
|
|
||||||
if(text.contains("{ARGOS.DATASET.TITLE}") && datasetEntity != null){
|
|
||||||
text = text.replace("{ARGOS.DATASET.TITLE}", datasetEntity.getLabel());
|
|
||||||
r.setText(text, 0);
|
|
||||||
}
|
|
||||||
if(text.contains("{ARGOS.DMP.LICENSE}")){
|
|
||||||
try{
|
|
||||||
Map<String, String> license = ((Map<String, String>) mapper.readValue(dmpEntity.getExtraProperties(), Map.class).get("license"));
|
|
||||||
text = text.replace("{ARGOS.DMP.LICENSE}", license.get("pid"));
|
|
||||||
}
|
|
||||||
catch (JsonProcessingException | NullPointerException e){
|
|
||||||
text = text.replace("{ARGOS.DMP.LICENSE}", "License: -");
|
|
||||||
}
|
|
||||||
r.setText(text, 0);
|
|
||||||
}
|
|
||||||
if(text.contains("{ARGOS.DMP.DOI}")){
|
|
||||||
if(dmpEntity.getDois() != null && !dmpEntity.getDois().isEmpty())
|
|
||||||
text = text.replace("{ARGOS.DMP.DOI}", dmpEntity.getDois().iterator().next().getDoi());
|
|
||||||
else
|
|
||||||
text = text.replace("{ARGOS.DMP.DOI}", "-");
|
|
||||||
r.setText(text, 0);
|
|
||||||
}
|
|
||||||
if(text.contains("{ARGOS.DMP.LAST_MODIFIED}")){
|
|
||||||
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
|
|
||||||
text = text.replace("{ARGOS.DMP.LAST_MODIFIED}", formatter.format(dmpEntity.getModified()));
|
|
||||||
r.setText(text, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if( datasetEntity != null) {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DATASET.TITLE}'", datasetEntity.getLabel());
|
||||||
|
}
|
||||||
|
Map<String, String> license = null;
|
||||||
|
try {
|
||||||
|
license = ((Map<String, String>) mapper.readValue(dmpEntity.getExtraProperties(), Map.class).get("license"));
|
||||||
|
if (license != null && license.get("pid") != null) {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.LICENSE}'", license.get("pid"));
|
||||||
|
} else {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.LICENSE}'", "License: -");
|
||||||
|
}
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.LICENSE}'", "License: -");
|
||||||
|
}
|
||||||
|
if(dmpEntity.getDois() != null && !dmpEntity.getDois().isEmpty()) {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.DOI}'", dmpEntity.getDois().iterator().next().getDoi());
|
||||||
|
} else {
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.DOI}'", "-");
|
||||||
|
}
|
||||||
|
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
|
||||||
|
this.replaceTextSegment(p, "'{ARGOS.DMP.LAST_MODIFIED}'", formatter.format(dmpEntity.getModified()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean textSegmentExists(XWPFParagraph paragraph, String textToFind) {
|
||||||
|
TextSegment foundTextSegment = null;
|
||||||
|
PositionInParagraph startPos = new PositionInParagraph(0, 0, 0);
|
||||||
|
while((foundTextSegment = this.searchText(paragraph, textToFind, startPos)) != null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceTextSegment(XWPFParagraph paragraph, String textToFind, String replacement) {
|
||||||
|
this.replaceTextSegment(paragraph, textToFind, replacement, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceTextSegment(XWPFParagraph paragraph, String textToFind, String replacement, Integer fontSize) {
|
||||||
|
TextSegment foundTextSegment = null;
|
||||||
|
PositionInParagraph startPos = new PositionInParagraph(0, 0, 0);
|
||||||
|
while((foundTextSegment = this.searchText(paragraph, textToFind, startPos)) != null) { // search all text segments having text to find
|
||||||
|
|
||||||
|
System.out.println(foundTextSegment.getBeginRun()+":"+foundTextSegment.getBeginText()+":"+foundTextSegment.getBeginChar());
|
||||||
|
System.out.println(foundTextSegment.getEndRun()+":"+foundTextSegment.getEndText()+":"+foundTextSegment.getEndChar());
|
||||||
|
|
||||||
|
// maybe there is text before textToFind in begin run
|
||||||
|
XWPFRun beginRun = paragraph.getRuns().get(foundTextSegment.getBeginRun());
|
||||||
|
String textInBeginRun = beginRun.getText(foundTextSegment.getBeginText());
|
||||||
|
String textBefore = textInBeginRun.substring(0, foundTextSegment.getBeginChar()); // we only need the text before
|
||||||
|
|
||||||
|
// maybe there is text after textToFind in end run
|
||||||
|
XWPFRun endRun = paragraph.getRuns().get(foundTextSegment.getEndRun());
|
||||||
|
String textInEndRun = endRun.getText(foundTextSegment.getEndText());
|
||||||
|
String textAfter = textInEndRun.substring(foundTextSegment.getEndChar() + 1); // we only need the text after
|
||||||
|
|
||||||
|
if (foundTextSegment.getEndRun() == foundTextSegment.getBeginRun()) {
|
||||||
|
textInBeginRun = textBefore + replacement + textAfter; // if we have only one run, we need the text before, then the replacement, then the text after in that run
|
||||||
|
} else {
|
||||||
|
textInBeginRun = textBefore + replacement; // else we need the text before followed by the replacement in begin run
|
||||||
|
endRun.setText(textAfter, foundTextSegment.getEndText()); // and the text after in end run
|
||||||
|
}
|
||||||
|
|
||||||
|
beginRun.setText(textInBeginRun, foundTextSegment.getBeginText());
|
||||||
|
if (fontSize != null) {
|
||||||
|
beginRun.setFontSize(fontSize);
|
||||||
|
}
|
||||||
|
// runs between begin run and end run needs to be removed
|
||||||
|
for (int runBetween = foundTextSegment.getEndRun() - 1; runBetween > foundTextSegment.getBeginRun(); runBetween--) {
|
||||||
|
paragraph.removeRun(runBetween); // remove not needed runs
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this methods parse the paragraph and search for the string searched.
|
||||||
|
* If it finds the string, it will return true and the position of the String
|
||||||
|
* will be saved in the parameter startPos.
|
||||||
|
*
|
||||||
|
* @param searched
|
||||||
|
* @param startPos
|
||||||
|
*/
|
||||||
|
private TextSegment searchText(XWPFParagraph paragraph, String searched, PositionInParagraph startPos) {
|
||||||
|
int startRun = startPos.getRun(),
|
||||||
|
startText = startPos.getText(),
|
||||||
|
startChar = startPos.getChar();
|
||||||
|
int beginRunPos = 0, candCharPos = 0;
|
||||||
|
boolean newList = false;
|
||||||
|
|
||||||
|
//CTR[] rArray = paragraph.getRArray(); //This does not contain all runs. It lacks hyperlink runs for ex.
|
||||||
|
java.util.List<XWPFRun> runs = paragraph.getRuns();
|
||||||
|
|
||||||
|
int beginTextPos = 0, beginCharPos = 0; //must be outside the for loop
|
||||||
|
|
||||||
|
//for (int runPos = startRun; runPos < rArray.length; runPos++) {
|
||||||
|
for (int runPos = startRun; runPos < runs.size(); runPos++) {
|
||||||
|
//int beginTextPos = 0, beginCharPos = 0, textPos = 0, charPos; //int beginTextPos = 0, beginCharPos = 0 must be outside the for loop
|
||||||
|
int textPos = 0, charPos;
|
||||||
|
//CTR ctRun = rArray[runPos];
|
||||||
|
CTR ctRun = runs.get(runPos).getCTR();
|
||||||
|
XmlCursor c = ctRun.newCursor();
|
||||||
|
c.selectPath("./*");
|
||||||
|
try {
|
||||||
|
while (c.toNextSelection()) {
|
||||||
|
XmlObject o = c.getObject();
|
||||||
|
if (o instanceof CTText) {
|
||||||
|
if (textPos >= startText) {
|
||||||
|
String candidate = ((CTText) o).getStringValue();
|
||||||
|
if (runPos == startRun) {
|
||||||
|
charPos = startChar;
|
||||||
|
} else {
|
||||||
|
charPos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; charPos < candidate.length(); charPos++) {
|
||||||
|
if ((candidate.charAt(charPos) == searched.charAt(0)) && (candCharPos == 0)) {
|
||||||
|
beginTextPos = textPos;
|
||||||
|
beginCharPos = charPos;
|
||||||
|
beginRunPos = runPos;
|
||||||
|
newList = true;
|
||||||
|
}
|
||||||
|
if (candidate.charAt(charPos) == searched.charAt(candCharPos)) {
|
||||||
|
if (candCharPos + 1 < searched.length()) {
|
||||||
|
candCharPos++;
|
||||||
|
} else if (newList) {
|
||||||
|
TextSegment segment = new TextSegment();
|
||||||
|
segment.setBeginRun(beginRunPos);
|
||||||
|
segment.setBeginText(beginTextPos);
|
||||||
|
segment.setBeginChar(beginCharPos);
|
||||||
|
segment.setEndRun(runPos);
|
||||||
|
segment.setEndText(textPos);
|
||||||
|
segment.setEndChar(charPos);
|
||||||
|
return segment;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
candCharPos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
textPos++;
|
||||||
|
} else if (o instanceof CTProofErr) {
|
||||||
|
c.removeXml();
|
||||||
|
} else if (o instanceof CTRPr) {
|
||||||
|
//do nothing
|
||||||
|
} else {
|
||||||
|
candCharPos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
c.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ public class DatasetRDAMapper {
|
||||||
rda.setTitle(dataset.getLabel());
|
rda.setTitle(dataset.getLabel());
|
||||||
rda.setDescription(dataset.getDescription());
|
rda.setDescription(dataset.getDescription());
|
||||||
rda.setAdditionalProperty("template", dataset.getProfile().getId());
|
rda.setAdditionalProperty("template", dataset.getProfile().getId());
|
||||||
|
rda.setAdditionalProperty("dmpSectionIndex", dataset.getDmpSectionIndex());
|
||||||
try {
|
try {
|
||||||
JSONObject jObject = new JSONObject(dataset.getProperties());
|
JSONObject jObject = new JSONObject(dataset.getProperties());
|
||||||
Map<String, Object> templateIdsToValues = jObject.toMap();
|
Map<String, Object> templateIdsToValues = jObject.toMap();
|
||||||
|
@ -284,6 +285,12 @@ public class DatasetRDAMapper {
|
||||||
eu.eudat.data.entities.Dataset entity = new eu.eudat.data.entities.Dataset();
|
eu.eudat.data.entities.Dataset entity = new eu.eudat.data.entities.Dataset();
|
||||||
entity.setLabel(rda.getTitle());
|
entity.setLabel(rda.getTitle());
|
||||||
entity.setDescription(rda.getDescription());
|
entity.setDescription(rda.getDescription());
|
||||||
|
if (rda.getAdditionalProperties().get("dmpSectionIndex") != null) {
|
||||||
|
entity.setDmpSectionIndex(Integer.parseInt(rda.getAdditionalProperties().get("dmpSectionIndex").toString()));
|
||||||
|
} else {
|
||||||
|
entity.setDmpSectionIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DescriptionTemplate profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(rda.getAdditionalProperties().get("template").toString()));
|
DescriptionTemplate profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(rda.getAdditionalProperties().get("template").toString()));
|
||||||
entity.setProfile(profile);
|
entity.setProfile(profile);
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package eu.eudat.models.rda.mapper;
|
package eu.eudat.models.rda.mapper;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import eu.eudat.data.entities.*;
|
import eu.eudat.data.entities.*;
|
||||||
|
import eu.eudat.logic.managers.DataManagementProfileManager;
|
||||||
import eu.eudat.logic.services.ApiContext;
|
import eu.eudat.logic.services.ApiContext;
|
||||||
import eu.eudat.logic.utilities.helpers.StreamDistinctBy;
|
import eu.eudat.logic.utilities.helpers.StreamDistinctBy;
|
||||||
|
import eu.eudat.models.data.dmp.AssociatedProfile;
|
||||||
import eu.eudat.models.rda.Dmp;
|
import eu.eudat.models.rda.Dmp;
|
||||||
import eu.eudat.models.rda.DmpId;
|
import eu.eudat.models.rda.DmpId;
|
||||||
import net.minidev.json.JSONObject;
|
import net.minidev.json.JSONObject;
|
||||||
|
@ -24,13 +27,13 @@ public class DmpRDAMapper {
|
||||||
|
|
||||||
private DatasetRDAMapper datasetRDAMapper;
|
private DatasetRDAMapper datasetRDAMapper;
|
||||||
private ApiContext apiContext;
|
private ApiContext apiContext;
|
||||||
|
private DataManagementProfileManager dataManagementProfileManager;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DmpRDAMapper(DatasetRDAMapper datasetRDAMapper, ApiContext apiContext) throws IOException {
|
public DmpRDAMapper(DatasetRDAMapper datasetRDAMapper, ApiContext apiContext, DataManagementProfileManager dataManagementProfileManager) throws IOException {
|
||||||
this.datasetRDAMapper = datasetRDAMapper;
|
this.datasetRDAMapper = datasetRDAMapper;
|
||||||
this.apiContext = apiContext;
|
this.apiContext = apiContext;
|
||||||
|
this.dataManagementProfileManager = dataManagementProfileManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@ -116,10 +119,15 @@ public class DmpRDAMapper {
|
||||||
}
|
}
|
||||||
// rda.getContributor().addAll(dmp.getUsers().stream().map(ContributorRDAMapper::toRDA).collect(Collectors.toList()));
|
// rda.getContributor().addAll(dmp.getUsers().stream().map(ContributorRDAMapper::toRDA).collect(Collectors.toList()));
|
||||||
rda.setDataset(dmp.getDataset().stream().filter(dataset -> dataset.getStatus() != eu.eudat.elastic.entities.Dmp.DMPStatus.DELETED.getValue()).map(dataset -> datasetRDAMapper.toRDA(dataset, rda)).collect(Collectors.toList()));
|
rda.setDataset(dmp.getDataset().stream().filter(dataset -> dataset.getStatus() != eu.eudat.elastic.entities.Dmp.DMPStatus.DELETED.getValue()).map(dataset -> datasetRDAMapper.toRDA(dataset, rda)).collect(Collectors.toList()));
|
||||||
if (dmp.getProject() != null) {
|
rda.setProject(Collections.singletonList(ProjectRDAMapper.toRDA(dmp.getProject(), dmp.getGrant())));
|
||||||
rda.setProject(Collections.singletonList(ProjectRDAMapper.toRDA(dmp.getProject(), dmp.getGrant())));
|
|
||||||
}
|
rda.setAdditionalProperty("templates", dmp.getAssociatedDmps().stream().map(item -> item.getDatasetprofile().getId().toString()).toArray());
|
||||||
rda.setAdditionalProperty("templates", dmp.getAssociatedDmps().stream().map(datasetProfile -> datasetProfile.getId().toString()).toArray());
|
rda.setAdditionalProperty("blueprintId", dmp.getProfile().getId());
|
||||||
|
rda.setAdditionalProperty("license", extraProperties.get("license"));
|
||||||
|
rda.setAdditionalProperty("visible", extraProperties.get("visible"));
|
||||||
|
rda.setAdditionalProperty("publicDate", extraProperties.get("publicDate"));
|
||||||
|
rda.setAdditionalProperty("contact", extraProperties.get("contact"));
|
||||||
|
rda.setAdditionalProperty("dmpProperties", dmp.getProperties());
|
||||||
return rda;
|
return rda;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,26 +146,46 @@ public class DmpRDAMapper {
|
||||||
entity.setDois(new HashSet<>());
|
entity.setDois(new HashSet<>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (((List<String>) rda.getAdditionalProperties().get("templates")) != null && !((List<String>) rda.getAdditionalProperties().get("templates")).isEmpty() && entity.getId() != null) {
|
|
||||||
entity.setAssociatedDmps(((List<String>) rda.getAdditionalProperties().get("templates")).stream().map(x -> this.getProfile(x, entity.getId())).filter(Objects::nonNull).collect(Collectors.toSet()));
|
String blueprintId = (String) rda.getAdditionalProperties().get("blueprintId");
|
||||||
}
|
DMPProfile blueprint = apiContext.getOperationsContext().getDatabaseRepository().getDmpProfileDao().find(UUID.fromString(blueprintId));
|
||||||
if (entity.getAssociatedDmps() == null) {
|
entity.setProfile(blueprint);
|
||||||
entity.setAssociatedDmps(new HashSet<>());
|
|
||||||
}
|
if (((List<String>) rda.getAdditionalProperties().get("templates")) != null && !((List<String>) rda.getAdditionalProperties().get("templates")).isEmpty()) {
|
||||||
if (profiles != null && entity.getId() != null) {
|
List<DescriptionTemplate> descriptionTemplates = ((List<String>) rda.getAdditionalProperties().get("templates")).stream().map(this::getProfile).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
for (String profile : profiles) {
|
Set<DMPDatasetProfile> dmpDatasetProfiles = new HashSet<>();
|
||||||
entity.getAssociatedDmps().add(this.getProfile(profile, entity.getId()));
|
for (DescriptionTemplate profile : descriptionTemplates) {
|
||||||
|
DMPDatasetProfile dmpDatasetProfile = new DMPDatasetProfile();
|
||||||
|
dmpDatasetProfile.setDmp(entity);
|
||||||
|
dmpDatasetProfile.setDatasetprofile(profile);
|
||||||
|
String indexes = this.dataManagementProfileManager.sectionIndexesForDescriptionTemplate(blueprint, profile.getId()).stream()
|
||||||
|
.map(String::valueOf) // convert each int to a string
|
||||||
|
.collect(Collectors.joining(","));
|
||||||
|
dmpDatasetProfile.setData("{\"dmpSectionIndex\":[" + indexes + "]}");
|
||||||
|
dmpDatasetProfiles.add(dmpDatasetProfile);
|
||||||
}
|
}
|
||||||
|
entity.setAssociatedDmps(dmpDatasetProfiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (entity.getAssociatedDmps() == null) {
|
||||||
|
// entity.setAssociatedDmps(new HashSet<>());
|
||||||
|
// }
|
||||||
|
// if (profiles != null && entity.getId() != null) {
|
||||||
|
// for (String profile : profiles) {
|
||||||
|
// entity.getAssociatedDmps().add(this.getProfile(profile, entity.getId()));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
if (rda.getContributor() != null && !rda.getContributor().isEmpty() && rda.getContributor().get(0).getContributorId() != null) {
|
if (rda.getContributor() != null && !rda.getContributor().isEmpty() && rda.getContributor().get(0).getContributorId() != null) {
|
||||||
entity.setResearchers(rda.getContributor().stream().filter(r -> r.getContributorId() != null).map(ContributorRDAMapper::toEntity).filter(StreamDistinctBy.distinctByKey(Researcher::getReference)).collect(Collectors.toSet()));
|
entity.setResearchers(rda.getContributor().stream().filter(r -> r.getContributorId() != null).map(ContributorRDAMapper::toEntity).filter(StreamDistinctBy.distinctByKey(Researcher::getReference)).collect(Collectors.toSet()));
|
||||||
}
|
}
|
||||||
entity.setCreated(rda.getCreated());
|
entity.setCreated(rda.getCreated());
|
||||||
entity.setModified(rda.getModified());
|
entity.setModified(rda.getModified());
|
||||||
entity.setDescription(rda.getDescription());
|
entity.setDescription(rda.getDescription());
|
||||||
DescriptionTemplate defaultProfile = ((DescriptionTemplate)entity.getAssociatedDmps().toArray()[0]);
|
if(entity.getAssociatedDmps().size() > 0) {
|
||||||
entity.setDataset(rda.getDataset().stream().map(rda1 -> datasetRDAMapper.toEntity(rda1, defaultProfile)).collect(Collectors.toSet()));
|
DescriptionTemplate defaultProfile = entity.getAssociatedDmps().stream().findFirst().get().getDatasetprofile();
|
||||||
if (rda.getProject().size() > 0) {
|
entity.setDataset(rda.getDataset().stream().map(rda1 -> datasetRDAMapper.toEntity(rda1, defaultProfile)).collect(Collectors.toSet()));
|
||||||
|
}
|
||||||
|
if (rda.getProject() != null && rda.getProject().size() > 0) {
|
||||||
Map<String, Object> result = ProjectRDAMapper.toEntity(rda.getProject().get(0), apiContext);
|
Map<String, Object> result = ProjectRDAMapper.toEntity(rda.getProject().get(0), apiContext);
|
||||||
entity.setProject((Project) result.get("project"));
|
entity.setProject((Project) result.get("project"));
|
||||||
result.entrySet().stream().filter(entry -> entry.getKey().startsWith("grant")).forEach(entry -> entity.setGrant((Grant) entry.getValue()));
|
result.entrySet().stream().filter(entry -> entry.getKey().startsWith("grant")).forEach(entry -> entity.setGrant((Grant) entry.getValue()));
|
||||||
|
@ -165,16 +193,19 @@ public class DmpRDAMapper {
|
||||||
|
|
||||||
Map<String, Object> extraProperties = new HashMap<>();
|
Map<String, Object> extraProperties = new HashMap<>();
|
||||||
extraProperties.put("language", LanguageRDAMapper.mapRDAIsoToLanguageIso(rda.getLanguage()));
|
extraProperties.put("language", LanguageRDAMapper.mapRDAIsoToLanguageIso(rda.getLanguage()));
|
||||||
|
if (rda.getAdditionalProperties().get("license") != null) extraProperties.put("license", rda.getAdditionalProperties().get("license"));
|
||||||
|
if (rda.getAdditionalProperties().get("visible") != null) extraProperties.put("visible", rda.getAdditionalProperties().get("visible"));
|
||||||
|
if (rda.getAdditionalProperties().get("publicDate") != null) extraProperties.put("publicDate", rda.getAdditionalProperties().get("publicDate"));
|
||||||
|
if (rda.getAdditionalProperties().get("contact") != null) extraProperties.put("contact", rda.getAdditionalProperties().get("contact"));
|
||||||
entity.setExtraProperties(JSONObject.toJSONString(extraProperties));
|
entity.setExtraProperties(JSONObject.toJSONString(extraProperties));
|
||||||
|
|
||||||
|
if (rda.getAdditionalProperties().get("dmpProperties") != null) entity.setProperties(rda.getAdditionalProperties().get("dmpProperties").toString());
|
||||||
|
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DMPDatasetProfile getProfile(String descriptionTemplateId, UUID dmpId) {
|
private DescriptionTemplate getProfile(String id) {
|
||||||
return apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().asQueryable().where(((builder, root) -> builder.and(
|
return apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().asQueryable().where(((builder, root) -> builder.equal(root.get("id"), UUID.fromString(id)))).getSingleOrDefault();
|
||||||
builder.equal(root.get("datasetprofile"), UUID.fromString(descriptionTemplateId)),
|
|
||||||
builder.equal(root.get("dmp"), dmpId))
|
|
||||||
)).getSingleOrDefault();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,13 @@ public class ProjectRDAMapper {
|
||||||
public static Project toRDA(eu.eudat.data.entities.Project project, Grant grant) {
|
public static Project toRDA(eu.eudat.data.entities.Project project, Grant grant) {
|
||||||
Project rda = new Project();
|
Project rda = new Project();
|
||||||
try {
|
try {
|
||||||
rda.setTitle(project.getLabel());
|
rda.setTitle(grant.getLabel());
|
||||||
rda.setDescription(project.getDescription());
|
rda.setDescription(grant.getDescription());
|
||||||
if (project.getStartdate() != null) {
|
if (grant.getStartdate() != null) {
|
||||||
rda.setStart(project.getStartdate().toString());
|
rda.setStart(grant.getStartdate().toString());
|
||||||
}
|
}
|
||||||
if (project.getEnddate() != null) {
|
if (grant.getEnddate() != null) {
|
||||||
rda.setEnd(project.getEnddate().toString());
|
rda.setEnd(grant.getEnddate().toString());
|
||||||
}
|
}
|
||||||
rda.setFunding(Collections.singletonList(FundingRDAMapper.toRDA(grant)));
|
rda.setFunding(Collections.singletonList(FundingRDAMapper.toRDA(grant)));
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -13,7 +13,7 @@ ADD COLUMN "Type" uuid;
|
||||||
INSERT INTO public."DescriptionTemplateType" ("ID", "Name", "Status")
|
INSERT INTO public."DescriptionTemplateType" ("ID", "Name", "Status")
|
||||||
VALUES ('709a8400-10ca-11ee-be56-0242ac120002', 'Dataset', 1);
|
VALUES ('709a8400-10ca-11ee-be56-0242ac120002', 'Dataset', 1);
|
||||||
|
|
||||||
UPDATE public."DescriptionTemplate" SET ("Type") = '709a8400-10ca-11ee-be56-0242ac120002';
|
UPDATE public."DescriptionTemplate" SET "Type" = '709a8400-10ca-11ee-be56-0242ac120002';
|
||||||
|
|
||||||
ALTER TABLE public."DescriptionTemplate"
|
ALTER TABLE public."DescriptionTemplate"
|
||||||
ALTER COLUMN "Type" SET NOT NULL;
|
ALTER COLUMN "Type" SET NOT NULL;
|
||||||
|
|
|
@ -4,7 +4,7 @@ BEGIN
|
||||||
PERFORM * FROM "DBVersion" WHERE version = this_version;
|
PERFORM * FROM "DBVersion" WHERE version = this_version;
|
||||||
IF FOUND THEN RETURN; END IF;
|
IF FOUND THEN RETURN; END IF;
|
||||||
|
|
||||||
INSERT INTO public."DMPProfile" VALUES ('86635178-36a6-484f-9057-a934e4eeecd5', 'Dmp Default Blueprint', '<root><sections><section id="f94e50e0-cb97-4c65-8b88-e5db6badd41d" label="Main Info" description="A DMP in Argos consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research datasets that highlight the steps followed and the means used across data management activities." ordinal="1" hasTemplates="false"><systemFields><systemField id="e62c3fa2-4cbe-41bf-a00e-ad722c7c7da1" type="0" label="Title of DMP" placeholder="Title of DMP" description="" required="true" ordinal="1"></systemField><systemField id="eed2871d-5201-401e-8453-87afbeac77e3" type="1" label="Description" placeholder="Fill with description" description="Briefly describe the context and purpose of the DMP" required="true" ordinal="2"></systemField><systemField id="41a0b1db-b186-467d-8edf-7d3b2456f95e" type="2" label="Researchers" placeholder="Select researchers" description="Add here the names of people that have produced, processed, analysed the data described in the DMP." required="false" ordinal="3"></systemField><systemField id="0f0afb55-a11b-41db-a4d0-67ebb74d8685" type="3" label="Organizations" placeholder="Select organization" description="Add here the names of the organizations contributing to the creation and revision of the DMPs" required="false" ordinal="4"></systemField><systemField id="db493026-3130-4730-9b93-da6b77d2eea4" type="4" label="Language" placeholder="Language" description="Select the language of your DMP" required="true" ordinal="5"></systemField><systemField id="22deb104-1c46-4ea8-8261-8fdc9500dca2" type="5" label="Contact" placeholder="Contact" description="" required="true" ordinal="6"></systemField></systemFields><descriptionTemplates></descriptionTemplates></section><section id="3c2608e5-9320-4d94-9ed7-1eab9500d84b" label="Funding" description="Add here information about the scope, funding, actors of your DMP and decide on access and re-use issues for the DMP output that you are creating." ordinal="2" hasTemplates="false"><systemFields><systemField id="527af8fe-27b0-4715-9e1e-35a2fce834a1" type="6" label="Funding organizations" placeholder="Funder" description="Select a funder of your research or add new" required="true" ordinal="1"></systemField><systemField id="4d12904e-2501-4d57-8d2b-1ac795c297e7" type="7" label="Grants" placeholder="Grant" description="Find the grant of your research or add new" required="true" ordinal="2"></systemField><systemField id="82f235c8-98fc-48d1-8245-36ab08f01036" type="8" label="Project" placeholder="Project" description="Projects in Argos are perceived as distinct activities falling under a grant or common activities under different grants in collaborative schemas, eg open call for contributions. Please complete it for the grant associated to your organization if your project falls under this category. In all other cases, please leave blank and it will be autocompleted." required="false" ordinal="3"></systemField></systemFields><descriptionTemplates></descriptionTemplates></section><section id="2a77e1f6-9989-4aeb-acd9-48e911a92abd" label="License" description="Each DMP can contain specific license informatation over how much open and available it is, that way you can determine who can see your dataset and for how long that data will be private." ordinal="3" hasTemplates="false"><systemFields><systemField id="75c31705-6731-45dd-9853-75c5d0627439" type="9" label="License" placeholder="License" description="Assign a license to your DMP by selecting the most appropriate from the list." required="false" ordinal="1"></systemField><systemField id="990df932-eae6-44ca-85da-5378b010f439" type="10" label="Access Rights" placeholder="Access Rights" description="Choose how the DMP is displayed after is published on Zenodo. By choosing Open Access, the DMP will be open on Zenodo after the Publication Date. By choosing Restricted Access, the DMP will be restricted after the publication is made." required="false" ordinal="2"></systemField></systemFields><descriptionTemplates></descriptionTemplates></section><section id="0db7845b-0e7c-41df-8d91-cbca97995fd5" label="Dataset Info" description="Datasets are documented following pre-defined templates which set the content of dataset descriptions. In Argos, a DMP can contain as many dataset descriptions as the datasets it documents." ordinal="4" hasTemplates="true"><systemFields></systemFields><descriptionTemplates></descriptionTemplates></section></sections></root>',1, now(),now());
|
INSERT INTO public."DMPProfile" VALUES ('86635178-36a6-484f-9057-a934e4eeecd5', 'Dmp Default Blueprint', '<root><sections><section id="f94e50e0-cb97-4c65-8b88-e5db6badd41d" label="Main Info" description="" ordinal="1" hasTemplates="false"><systemFields><systemField id="e62c3fa2-4cbe-41bf-a00e-ad722c7c7da1" type="0" label="Title of DMP" placeholder="Title of DMP" description="" required="true" ordinal="1"></systemField><systemField id="eed2871d-5201-401e-8453-87afbeac77e3" type="1" label="Description" placeholder="Fill with description" description="Briefly describe the context and purpose of the DMP" required="true" ordinal="2"></systemField><systemField id="41a0b1db-b186-467d-8edf-7d3b2456f95e" type="2" label="Researchers" placeholder="Select researchers" description="Add here the names of people that have produced, processed, analysed the data described in the DMP." required="false" ordinal="3"></systemField><systemField id="0f0afb55-a11b-41db-a4d0-67ebb74d8685" type="3" label="Organizations" placeholder="Select organization" description="Add here the names of the organizations contributing to the creation and revision of the DMPs" required="false" ordinal="4"></systemField><systemField id="db493026-3130-4730-9b93-da6b77d2eea4" type="4" label="Language" placeholder="Language" description="Select the language of your DMP" required="true" ordinal="5"></systemField><systemField id="22deb104-1c46-4ea8-8261-8fdc9500dca2" type="5" label="Contact" placeholder="Contact" description="" required="true" ordinal="6"></systemField></systemFields><descriptionTemplates></descriptionTemplates></section><section id="3c2608e5-9320-4d94-9ed7-1eab9500d84b" label="Funding" description="" ordinal="2" hasTemplates="false"><systemFields><systemField id="527af8fe-27b0-4715-9e1e-35a2fce834a1" type="6" label="Funding organizations" placeholder="Funder" description="Select a funder of your research or add new" required="true" ordinal="1"></systemField><systemField id="4d12904e-2501-4d57-8d2b-1ac795c297e7" type="7" label="Grants" placeholder="Grant" description="Find the grant of your research or add new" required="true" ordinal="2"></systemField><systemField id="82f235c8-98fc-48d1-8245-36ab08f01036" type="8" label="Project" placeholder="Project" description="Projects in Argos are perceived as distinct activities falling under a grant or common activities under different grants in collaborative schemas, eg open call for contributions. Please complete it for the grant associated to your organization if your project falls under this category. In all other cases, please leave blank and it will be autocompleted." required="false" ordinal="3"></systemField></systemFields><descriptionTemplates></descriptionTemplates></section><section id="2a77e1f6-9989-4aeb-acd9-48e911a92abd" label="License" description="" ordinal="3" hasTemplates="false"><systemFields><systemField id="75c31705-6731-45dd-9853-75c5d0627439" type="9" label="License" placeholder="License" description="Assign a license to your DMP by selecting the most appropriate from the list." required="false" ordinal="1"></systemField><systemField id="990df932-eae6-44ca-85da-5378b010f439" type="10" label="Access Rights" placeholder="Access Rights" description="Choose how the DMP is displayed after is published on Zenodo. By choosing Open Access, the DMP will be open on Zenodo after the Publication Date. By choosing Restricted Access, the DMP will be restricted after the publication is made." required="false" ordinal="2"></systemField></systemFields><descriptionTemplates></descriptionTemplates></section><section id="0db7845b-0e7c-41df-8d91-cbca97995fd5" label="Templates" description="" ordinal="4" hasTemplates="true"><systemFields></systemFields><descriptionTemplates></descriptionTemplates></section></sections></root>',1, now(),now());
|
||||||
UPDATE public."DMP" SET "Profile" = '86635178-36a6-484f-9057-a934e4eeecd5' WHERE "Profile" IS NULL;
|
UPDATE public."DMP" SET "Profile" = '86635178-36a6-484f-9057-a934e4eeecd5' WHERE "Profile" IS NULL;
|
||||||
UPDATE public."Dataset" SET "DmpSectionIndex" = '3' WHERE "DmpSectionIndex" IS NULL;
|
UPDATE public."Dataset" SET "DmpSectionIndex" = '3' WHERE "DmpSectionIndex" IS NULL;
|
||||||
UPDATE public."DMPDatasetProfile" SET "data" = '{"dmpSectionIndex":[3]}' WHERE "data" IS NULL;
|
UPDATE public."DMPDatasetProfile" SET "data" = '{"dmpSectionIndex":[3]}' WHERE "data" IS NULL;
|
||||||
|
|
|
@ -25,7 +25,4 @@
|
||||||
<app-notification *ngIf="!onlySplash"></app-notification>
|
<app-notification *ngIf="!onlySplash"></app-notification>
|
||||||
<router-outlet *ngIf="onlySplash"></router-outlet>
|
<router-outlet *ngIf="onlySplash"></router-outlet>
|
||||||
|
|
||||||
<ngx-guided-tour
|
<ngx-guided-tour [skipText]="'DASHBOARD.TOUR-GUIDE.LEAVE-TOUR'| translate" [nextText]="'DASHBOARD.TOUR-GUIDE.GOT-IT'| translate"></ngx-guided-tour>
|
||||||
[skipText]="'DASHBOARD.TOUR-GUIDE.LEAVE-TOUR'| translate"
|
|
||||||
[nextText]="'DASHBOARD.TOUR-GUIDE.GOT-IT'| translate"
|
|
||||||
></ngx-guided-tour>
|
|
|
@ -40,3 +40,70 @@
|
||||||
::ng-deep .mat-chip {
|
::ng-deep .mat-chip {
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notification-header {
|
||||||
|
height: 64px;
|
||||||
|
background: var(--unnamed-color-var(--primary-color)) 0% 0% no-repeat padding-box;
|
||||||
|
background: var(--primary-color) 0% 0% no-repeat padding-box;
|
||||||
|
box-shadow: 0px 3px 6px #00000029;
|
||||||
|
padding: 0.6rem;
|
||||||
|
margin: 30px 0px 0px 0px;
|
||||||
|
border-radius: 4px;
|
||||||
|
opacity: 1;
|
||||||
|
|
||||||
|
.info {
|
||||||
|
flex: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-discard-btn {
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid #ffffff;
|
||||||
|
color: white;
|
||||||
|
border-radius: 30px;
|
||||||
|
opacity: 1;
|
||||||
|
width: 110px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-title {
|
||||||
|
text-align: left;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #ffffff;
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-subtitle {
|
||||||
|
text-align: left;
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 16px;
|
||||||
|
opacity: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.notification-link {
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-save-btn {
|
||||||
|
background: #ffffff 0% 0% no-repeat padding-box !important;
|
||||||
|
border-radius: 30px;
|
||||||
|
opacity: 1;
|
||||||
|
width: 110px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--primary-color);
|
||||||
|
}
|
|
@ -20,6 +20,8 @@ import { MatomoInjector } from 'ngx-matomo';
|
||||||
import { MatomoService } from './core/services/matomo/matomo-service';
|
import { MatomoService } from './core/services/matomo/matomo-service';
|
||||||
import { SideNavService } from './core/services/sidenav/side-nav.sevice';
|
import { SideNavService } from './core/services/sidenav/side-nav.sevice';
|
||||||
import { MatSidenav } from '@angular/material/sidenav';
|
import { MatSidenav } from '@angular/material/sidenav';
|
||||||
|
import { runInThisContext } from 'vm';
|
||||||
|
import * as moment from 'moment';
|
||||||
|
|
||||||
|
|
||||||
declare const gapi: any;
|
declare const gapi: any;
|
||||||
|
@ -39,7 +41,7 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
private statusChangeSubscription: Subscription;
|
private statusChangeSubscription: Subscription;
|
||||||
onlySplash = true;
|
onlySplash = true;
|
||||||
|
|
||||||
@ViewChild('sidenav') sidenav:MatSidenav;
|
@ViewChild('sidenav') sidenav: MatSidenav;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private router: Router,
|
private router: Router,
|
||||||
|
@ -52,7 +54,7 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
private cookieService: CookieService,
|
private cookieService: CookieService,
|
||||||
private ccService: NgcCookieConsentService,
|
private ccService: NgcCookieConsentService,
|
||||||
private language: LanguageService,
|
private language: LanguageService,
|
||||||
private configurationService: ConfigurationService,
|
public configurationService: ConfigurationService,
|
||||||
private location: Location,
|
private location: Location,
|
||||||
private matomoService: MatomoService,
|
private matomoService: MatomoService,
|
||||||
private sidenavService: SideNavService
|
private sidenavService: SideNavService
|
||||||
|
@ -63,34 +65,34 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
}
|
}
|
||||||
ngAfterViewInit(): void {
|
ngAfterViewInit(): void {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.sideNavSubscription = this.sidenavService.status().subscribe(isopen=>{
|
this.sideNavSubscription = this.sidenavService.status().subscribe(isopen => {
|
||||||
const hamburger = document.getElementById('hamburger');
|
const hamburger = document.getElementById('hamburger');
|
||||||
if(isopen){
|
if (isopen) {
|
||||||
//update value of hamburfer
|
//update value of hamburfer
|
||||||
if(!hamburger){//try later
|
if (!hamburger) {//try later
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const hamburger = document.getElementById('hamburger');
|
const hamburger = document.getElementById('hamburger');
|
||||||
if(hamburger){
|
if (hamburger) {
|
||||||
hamburger.classList.add('change');
|
hamburger.classList.add('change');
|
||||||
}
|
}
|
||||||
}, 300);
|
}, 300);
|
||||||
}else{
|
} else {
|
||||||
hamburger.classList.add('change');
|
hamburger.classList.add('change');
|
||||||
}
|
}
|
||||||
this.sidenav.open()
|
this.sidenav.open()
|
||||||
}else{//closed
|
} else {//closed
|
||||||
if(!hamburger){//try later
|
if (!hamburger) {//try later
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const hamburger = document.getElementById('hamburger');
|
const hamburger = document.getElementById('hamburger');
|
||||||
if(hamburger){
|
if (hamburger) {
|
||||||
hamburger.classList.remove('change');
|
hamburger.classList.remove('change');
|
||||||
}
|
}
|
||||||
}, 300);
|
}, 300);
|
||||||
}else{
|
} else {
|
||||||
hamburger.classList.remove('change');
|
hamburger.classList.remove('change');
|
||||||
}
|
}
|
||||||
this.sidenav.close();
|
this.sidenav.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -120,8 +122,8 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
}
|
}
|
||||||
if (!this.cookieService.check("cookiesConsent")) {
|
if (!this.cookieService.check("cookiesConsent")) {
|
||||||
// this.cookieService.set("cookiesConsent", "false", 356);
|
// this.cookieService.set("cookiesConsent", "false", 356);
|
||||||
this.cookieService.set("cookiesConsent", "false", 356,null,null,false, 'Lax');
|
this.cookieService.set("cookiesConsent", "false", 356, null, null, false, 'Lax');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hasBreadCrumb = this.router.events.pipe(
|
this.hasBreadCrumb = this.router.events.pipe(
|
||||||
|
@ -155,7 +157,7 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
this.statusChangeSubscription = this.ccService.statusChange$.subscribe((event: NgcStatusChangeEvent) => {
|
this.statusChangeSubscription = this.ccService.statusChange$.subscribe((event: NgcStatusChangeEvent) => {
|
||||||
if (event.status == "dismiss") {
|
if (event.status == "dismiss") {
|
||||||
// this.cookieService.set("cookiesConsent", "true", 365);
|
// this.cookieService.set("cookiesConsent", "true", 365);
|
||||||
this.cookieService.set("cookiesConsent", "true", 356,null,null,false, 'Lax');
|
this.cookieService.set("cookiesConsent", "true", 356, null, null, false, 'Lax');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -177,7 +179,7 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
}
|
}
|
||||||
this.ccService.destroy();
|
this.ccService.destroy();
|
||||||
this.ccService.init(this.ccService.getConfig());
|
this.ccService.init(this.ccService.getConfig());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
translateTitle(ttl: string) {
|
translateTitle(ttl: string) {
|
||||||
|
@ -196,7 +198,7 @@ export class AppComponent implements OnInit, AfterViewInit {
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
this.statusChangeSubscription.unsubscribe();
|
this.statusChangeSubscription.unsubscribe();
|
||||||
if(this.sideNavSubscription){
|
if (this.sideNavSubscription) {
|
||||||
this.sideNavSubscription.unsubscribe();
|
this.sideNavSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,6 +101,21 @@ export class ConfigurationService extends BaseComponent {
|
||||||
return this._maxFileSizeInMB;
|
return this._maxFileSizeInMB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _newReleaseNotificationLink: number;
|
||||||
|
get newReleaseNotificationLink(): number {
|
||||||
|
return this._newReleaseNotificationLink;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _newReleaseNotificationExpires: number;
|
||||||
|
get newReleaseNotificationExpires(): number {
|
||||||
|
return this._newReleaseNotificationExpires;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _newReleaseNotificationVersionCode: number;
|
||||||
|
get newReleaseNotificationVersionCode(): number {
|
||||||
|
return this._newReleaseNotificationVersionCode;
|
||||||
|
}
|
||||||
|
|
||||||
public loadConfiguration(): Promise<any> {
|
public loadConfiguration(): Promise<any> {
|
||||||
return new Promise((r, e) => {
|
return new Promise((r, e) => {
|
||||||
|
|
||||||
|
@ -146,6 +161,9 @@ export class ConfigurationService extends BaseComponent {
|
||||||
this._matomoSiteId = config.matomo.siteId;
|
this._matomoSiteId = config.matomo.siteId;
|
||||||
}
|
}
|
||||||
this._maxFileSizeInMB = config.maxFileSizeInMB;
|
this._maxFileSizeInMB = config.maxFileSizeInMB;
|
||||||
|
this._newReleaseNotificationExpires = config.newReleaseNotification?.expires;
|
||||||
|
this._newReleaseNotificationLink = config.newReleaseNotification?.link;
|
||||||
|
this._newReleaseNotificationVersionCode = config.newReleaseNotification?.versionCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,5 +37,6 @@ export interface MultipleAutoCompleteConfiguration {
|
||||||
autoSelectFirstOptionOnBlur?: boolean;
|
autoSelectFirstOptionOnBlur?: boolean;
|
||||||
|
|
||||||
appendClassToItem?: {class: string, applyFunc: (item:any) => boolean}[];
|
appendClassToItem?: {class: string, applyFunc: (item:any) => boolean}[];
|
||||||
|
canRemoveItem?: (selectedItem: any) => boolean;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -483,6 +483,10 @@ export class MultipleAutoCompleteComponent extends _CustomComponentMixinBase imp
|
||||||
if (event != null) {
|
if (event != null) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
}
|
}
|
||||||
|
if (this.configuration.canRemoveItem != null && !this.configuration.canRemoveItem(item)) {
|
||||||
|
event.stopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
const valueToDelete = this._valueToAssign(item);
|
const valueToDelete = this._valueToAssign(item);
|
||||||
this.value = this.value.filter(x => this.stringify(x) !== this.stringify(valueToDelete)); //TODO, maybe we need to implement equality here differently.
|
this.value = this.value.filter(x => this.stringify(x) !== this.stringify(valueToDelete)); //TODO, maybe we need to implement equality here differently.
|
||||||
this.optionRemoved.emit(item);
|
this.optionRemoved.emit(item);
|
||||||
|
|
|
@ -47,7 +47,8 @@ export class RichTextEditorComponent {
|
||||||
{ name: 'H3 header', class: '', tag: 'h3' },
|
{ name: 'H3 header', class: '', tag: 'h3' },
|
||||||
{ name: 'H4 header', class: '', tag: 'h4' },
|
{ name: 'H4 header', class: '', tag: 'h4' },
|
||||||
{ name: 'H5 header', class: '', tag: 'h5'},
|
{ name: 'H5 header', class: '', tag: 'h5'},
|
||||||
{ name: 'H6 header', class: '', tag: 'h6'}
|
{ name: 'H6 header', class: '', tag: 'h6'},
|
||||||
|
{ name: 'Highlight', class: 'highlight', tag: ''}
|
||||||
],
|
],
|
||||||
toolbarHiddenButtons: [
|
toolbarHiddenButtons: [
|
||||||
[
|
[
|
||||||
|
@ -56,7 +57,7 @@ export class RichTextEditorComponent {
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'fontSize',
|
'fontSize',
|
||||||
// 'backgroundColor',
|
'backgroundColor',
|
||||||
// 'customClasses',
|
// 'customClasses',
|
||||||
'insertImage',
|
'insertImage',
|
||||||
'insertVideo',
|
'insertVideo',
|
||||||
|
|
|
@ -5,15 +5,15 @@ import { ValidationErrorModel } from "@common/forms/validation/error-model/valid
|
||||||
import { ValidationContext } from "@common/forms/validation/validation-context";
|
import { ValidationContext } from "@common/forms/validation/validation-context";
|
||||||
|
|
||||||
export class DmpBlueprintEditor {
|
export class DmpBlueprintEditor {
|
||||||
public id: string;
|
public id: string;
|
||||||
public label: string;
|
public label: string;
|
||||||
public definition: DmpBlueprintDefinitionEditor = new DmpBlueprintDefinitionEditor();
|
public definition: DmpBlueprintDefinitionEditor = new DmpBlueprintDefinitionEditor();
|
||||||
public status: number;
|
public status: number;
|
||||||
public created: Date;
|
public created: Date;
|
||||||
public modified: Date;
|
public modified: Date;
|
||||||
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
||||||
|
|
||||||
fromModel(item: DmpBlueprint): DmpBlueprintEditor {
|
fromModel(item: DmpBlueprint): DmpBlueprintEditor {
|
||||||
this.id = item.id;
|
this.id = item.id;
|
||||||
this.label = item.label;
|
this.label = item.label;
|
||||||
this.definition = new DmpBlueprintDefinitionEditor().fromModel(item.definition);
|
this.definition = new DmpBlueprintDefinitionEditor().fromModel(item.definition);
|
||||||
|
@ -51,9 +51,9 @@ export class DmpBlueprintEditor {
|
||||||
|
|
||||||
export class DmpBlueprintDefinitionEditor {
|
export class DmpBlueprintDefinitionEditor {
|
||||||
|
|
||||||
public sections: SectionDmpBlueprintEditor[] = new Array<SectionDmpBlueprintEditor>();
|
public sections: SectionDmpBlueprintEditor[] = new Array<SectionDmpBlueprintEditor>();
|
||||||
|
|
||||||
fromModel(item: DmpBlueprintDefinition): DmpBlueprintDefinitionEditor {
|
fromModel(item: DmpBlueprintDefinition): DmpBlueprintDefinitionEditor {
|
||||||
if (item.sections) { item.sections.map(x => this.sections.push(new SectionDmpBlueprintEditor().fromModel(x))); }
|
if (item.sections) { item.sections.map(x => this.sections.push(new SectionDmpBlueprintEditor().fromModel(x))); }
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ export class DmpBlueprintDefinitionEditor {
|
||||||
const formBuilder = new FormBuilder();
|
const formBuilder = new FormBuilder();
|
||||||
const formGroup = formBuilder.group({});
|
const formGroup = formBuilder.group({});
|
||||||
const sectionsFormArray = new Array<FormGroup>();
|
const sectionsFormArray = new Array<FormGroup>();
|
||||||
this.sections.forEach(item => {
|
this.sections.sort((a, b) => a.ordinal - b.ordinal).forEach(item => {
|
||||||
const form: FormGroup = item.buildForm();
|
const form: FormGroup = item.buildForm();
|
||||||
sectionsFormArray.push(form);
|
sectionsFormArray.push(form);
|
||||||
});
|
});
|
||||||
|
@ -72,23 +72,23 @@ export class DmpBlueprintDefinitionEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SectionDmpBlueprintEditor {
|
export class SectionDmpBlueprintEditor {
|
||||||
public id: string;
|
public id: string;
|
||||||
public label: string;
|
public label: string;
|
||||||
public description: string;
|
public description: string;
|
||||||
public ordinal: number;
|
public ordinal: number;
|
||||||
public fields: FieldInSectionEditor[] = new Array<FieldInSectionEditor>();
|
public fields: FieldInSectionEditor[] = new Array<FieldInSectionEditor>();
|
||||||
public hasTemplates: boolean;
|
public hasTemplates: boolean;
|
||||||
public descriptionTemplates: DescriptionTemplatesInSectionEditor[] = new Array<DescriptionTemplatesInSectionEditor>();
|
public descriptionTemplates: DescriptionTemplatesInSectionEditor[] = new Array<DescriptionTemplatesInSectionEditor>();
|
||||||
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
||||||
|
|
||||||
fromModel(item: SectionDmpBlueprint): SectionDmpBlueprintEditor {
|
fromModel(item: SectionDmpBlueprint): SectionDmpBlueprintEditor {
|
||||||
this.id = item.id;
|
this.id = item.id;
|
||||||
this.label = item.label;
|
this.label = item.label;
|
||||||
this.description = item.description;
|
this.description = item.description;
|
||||||
this.ordinal = item.ordinal;
|
this.ordinal = item.ordinal;
|
||||||
if (item.fields) { item.fields.map(x => this.fields.push(new FieldInSectionEditor().fromModel(x))); }
|
if (item.fields) { item.fields.map(x => this.fields.push(new FieldInSectionEditor().fromModel(x))); }
|
||||||
this.hasTemplates = item.hasTemplates;
|
this.hasTemplates = item.hasTemplates;
|
||||||
if (item.descriptionTemplates) { item.descriptionTemplates.map(x => this.descriptionTemplates.push(new DescriptionTemplatesInSectionEditor().fromModel(x))); }
|
if (item.descriptionTemplates) { item.descriptionTemplates.map(x => this.descriptionTemplates.push(new DescriptionTemplatesInSectionEditor().fromModel(x))); }
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,14 +101,14 @@ export class SectionDmpBlueprintEditor {
|
||||||
ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal')],
|
ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal')],
|
||||||
hasTemplates: [{ value: this.hasTemplates, disabled: disabled }, context.getValidation('hasTemplates')]
|
hasTemplates: [{ value: this.hasTemplates, disabled: disabled }, context.getValidation('hasTemplates')]
|
||||||
});
|
});
|
||||||
const formBuilder = new FormBuilder();
|
const formBuilder = new FormBuilder();
|
||||||
const fieldsFormArray = new Array<FormGroup>();
|
const fieldsFormArray = new Array<FormGroup>();
|
||||||
this.fields.forEach(item => {
|
this.fields.sort((a, b) => a.ordinal - b.ordinal).forEach(item => {
|
||||||
const form: FormGroup = item.buildForm();
|
const form: FormGroup = item.buildForm();
|
||||||
fieldsFormArray.push(form);
|
fieldsFormArray.push(form);
|
||||||
});
|
});
|
||||||
formGroup.addControl('fields', formBuilder.array(fieldsFormArray));
|
formGroup.addControl('fields', formBuilder.array(fieldsFormArray));
|
||||||
const descriptionTemplatesFormArray = new Array<FormGroup>();
|
const descriptionTemplatesFormArray = new Array<FormGroup>();
|
||||||
this.descriptionTemplates.forEach(item => {
|
this.descriptionTemplates.forEach(item => {
|
||||||
const form: FormGroup = item.buildForm();
|
const form: FormGroup = item.buildForm();
|
||||||
descriptionTemplatesFormArray.push(form);
|
descriptionTemplatesFormArray.push(form);
|
||||||
|
@ -130,25 +130,25 @@ export class SectionDmpBlueprintEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class FieldInSectionEditor {
|
export class FieldInSectionEditor {
|
||||||
public id: string;
|
public id: string;
|
||||||
public category: FieldCategory;
|
public category: FieldCategory;
|
||||||
public type: number;
|
public type: number;
|
||||||
public label: string;
|
public label: string;
|
||||||
public placeholder: string;
|
public placeholder: string;
|
||||||
public description: string;
|
public description: string;
|
||||||
public required: boolean;
|
public required: boolean;
|
||||||
public ordinal: number;
|
public ordinal: number;
|
||||||
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
||||||
|
|
||||||
fromModel(item: FieldInSection): FieldInSectionEditor {
|
fromModel(item: FieldInSection): FieldInSectionEditor {
|
||||||
this.id = item.id;
|
this.id = item.id;
|
||||||
this.category = item.category;
|
this.category = item.category;
|
||||||
this.type = item.type;
|
this.type = item.type;
|
||||||
this.label = item.label;
|
this.label = item.label;
|
||||||
this.placeholder = item.placeholder;
|
this.placeholder = item.placeholder;
|
||||||
this.description = item.description;
|
this.description = item.description;
|
||||||
this.required = item.required;
|
this.required = item.required;
|
||||||
this.ordinal = item.ordinal;
|
this.ordinal = item.ordinal;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,19 +182,19 @@ export class FieldInSectionEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DescriptionTemplatesInSectionEditor {
|
export class DescriptionTemplatesInSectionEditor {
|
||||||
public id: string;
|
public id: string;
|
||||||
public descriptionTemplateId: string;
|
public descriptionTemplateId: string;
|
||||||
public label: string;
|
public label: string;
|
||||||
public minMultiplicity: number;
|
public minMultiplicity: number;
|
||||||
public maxMultiplicity: number;
|
public maxMultiplicity: number;
|
||||||
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
||||||
|
|
||||||
fromModel(item: DescriptionTemplatesInSection): DescriptionTemplatesInSectionEditor {
|
fromModel(item: DescriptionTemplatesInSection): DescriptionTemplatesInSectionEditor {
|
||||||
this.id = item.id;
|
this.id = item.id;
|
||||||
this.descriptionTemplateId = item.descriptionTemplateId;
|
this.descriptionTemplateId = item.descriptionTemplateId;
|
||||||
this.label = item.label;
|
this.label = item.label;
|
||||||
this.minMultiplicity = item.minMultiplicity;
|
this.minMultiplicity = item.minMultiplicity;
|
||||||
this.maxMultiplicity = item.maxMultiplicity;
|
this.maxMultiplicity = item.maxMultiplicity;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,4 +253,4 @@ export class DescriptionTemplatesInSectionEditor {
|
||||||
// });
|
// });
|
||||||
// return formGroup;
|
// return formGroup;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -249,6 +249,9 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie
|
||||||
|
|
||||||
removeField(sectionIndex: number, fieldIndex: number): void {
|
removeField(sectionIndex: number, fieldIndex: number): void {
|
||||||
this.fieldsArray(sectionIndex).removeAt(fieldIndex);
|
this.fieldsArray(sectionIndex).removeAt(fieldIndex);
|
||||||
|
this.fieldsArray(sectionIndex).controls.forEach((field, index) => {
|
||||||
|
field.get('ordinal').setValue(index + 1);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
systemFieldsArray(sectionIndex: number): FormArray {
|
systemFieldsArray(sectionIndex: number): FormArray {
|
||||||
|
@ -366,6 +369,9 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie
|
||||||
drop(event: CdkDragDrop<string[]>, sectionIndex: number) {
|
drop(event: CdkDragDrop<string[]>, sectionIndex: number) {
|
||||||
moveItemInArray(this.fieldsArray(sectionIndex).controls, event.previousIndex, event.currentIndex);
|
moveItemInArray(this.fieldsArray(sectionIndex).controls, event.previousIndex, event.currentIndex);
|
||||||
moveItemInArray(this.fieldsArray(sectionIndex).value, event.previousIndex, event.currentIndex);
|
moveItemInArray(this.fieldsArray(sectionIndex).value, event.previousIndex, event.currentIndex);
|
||||||
|
this.fieldsArray(sectionIndex).controls.forEach((field, index) => {
|
||||||
|
field.get('ordinal').setValue(index + 1);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
dropSections(event: CdkDragDrop<string[]>) {
|
dropSections(event: CdkDragDrop<string[]>) {
|
||||||
|
|
|
@ -1,8 +1,28 @@
|
||||||
<div class="main-content dashboard-main-container h-100" [class.non-auth-main-container]="!this.isAuthenticated()">
|
<div class="main-content dashboard-main-container h-100" [class.non-auth-main-container]="!this.isAuthenticated()">
|
||||||
<div *ngIf="this.isAuthenticated()" class="container-fluid">
|
<div *ngIf="this.isAuthenticated()" class="container-fluid">
|
||||||
<div *ngIf="this.dashboardStatisticsData">
|
<div *ngIf="this.dashboardStatisticsData">
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div *ngIf="newReleaseNotificationVisible" class="new-releases-card col-auto mt-0 mr-4" [style.display]="isVisible ? 'block' : 'none'">
|
||||||
|
<a class="col-auto d-flex" (click)="dismissNewReleaseNotification()"><span class="ml-auto mt-3 material-icons clear-icon">clear</span></a>
|
||||||
|
<div class="row new-releases-hint-container m-0">
|
||||||
|
<p class="new-releases-chip mb-0 col-auto">{{'NEW-RELEASE-NOTIFICATION.HINT' | translate}}</p>
|
||||||
|
</div>
|
||||||
|
<p class="new-releases-title mb-0 pt-4">{{'NEW-RELEASE-NOTIFICATION.TITLE' | translate}}</p>
|
||||||
|
<p class="new-releases-content mb-0">{{'NEW-RELEASE-NOTIFICATION.BODY' | translate}}</p>
|
||||||
|
|
||||||
|
<div class="row d-flex align-items-center mt-4" *ngIf="this.configurationService.newReleaseNotificationLink">
|
||||||
|
<div class="col-auto d-flex">
|
||||||
|
<a class="notification-link" href="{{this.configurationService.newReleaseNotificationLink}}" target="_blank">
|
||||||
|
<button mat-raised-button type="button" class="col-auto align-self-center new-releases-btn">{{'NEW-RELEASE-NOTIFICATION.ACTIONS.LEARN-MORE' | translate}}</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<span class="new-releases-logo">
|
||||||
|
<img src="../../../assets/images/new-releases-logo.png">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="card col-auto mt-0" [style.display]="isVisible ? 'block' : 'none'">
|
<div class="card col-auto mt-0" [style.display]="isVisible ? 'block' : 'none'">
|
||||||
<a *ngIf="this.hasDmps()" class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto mt-3 material-icons clear-icon">clear</span></a>
|
<a *ngIf="this.hasDmps()" class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto mt-3 material-icons clear-icon">clear</span></a>
|
||||||
|
|
||||||
|
@ -29,158 +49,156 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="this.hasDmps()" class="col">
|
|
||||||
<div class="latest-activity-title">{{'DASHBOARD.LATEST-ACTIVITY' | translate}}</div>
|
|
||||||
<mat-tab-group mat-align-tabs="start" class="remove-border-bottom"
|
|
||||||
[selectedIndex]="indexFromCurrentType" (selectedTabChange)="currentType = $event.tab.ariaLabel">
|
|
||||||
<!-- <mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}} ({{totalRecents}})">-->
|
|
||||||
<mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}}">
|
|
||||||
<app-recent-edited-activity (totalCountRecentEdited)="onCountAllRecent($event)" [isActive]="currentType == 'recent'"></app-recent-edited-activity>
|
|
||||||
<div *ngIf="totalRecents === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
|
||||||
</mat-tab>
|
|
||||||
<!-- <mat-tab aria-label="draft" label="{{'DASHBOARD.DRAFTS' | translate}} ({{totalDraftDatasets}})">-->
|
|
||||||
<mat-tab aria-label="drafts" label="{{'DASHBOARD.DRAFTS' | translate}}">
|
|
||||||
<app-drafts (totalCountDraftDatasets)="onCountDraftDatasets($event)" [isActive]="currentType == 'drafts'"></app-drafts>
|
|
||||||
<div *ngIf="totalDraftDatasets === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
|
||||||
</mat-tab>>
|
|
||||||
<!-- <mat-tab aria-label="dmps" label="{{'DASHBOARD.DMPS' | translate}} ({{totalDmps}})">-->
|
|
||||||
<mat-tab aria-label="dmps" label="{{'DASHBOARD.DMPS' | translate}}">
|
|
||||||
<app-recent-edited-dmp-activity (totalCountDmps)="onCountDmps($event)" [isActive]="currentType == 'dmps'"></app-recent-edited-dmp-activity>
|
|
||||||
<div *ngIf="totalDmps === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
|
||||||
</mat-tab>
|
|
||||||
<!-- <mat-tab aria-label="datasets" label="{{'DASHBOARD.DESCRIPTIONS' | translate}} ({{totalDatasets}})">-->
|
|
||||||
<mat-tab aria-label="datasets" label="{{'DASHBOARD.DESCRIPTIONS' | translate}}">
|
|
||||||
<app-recent-edited-dataset-activity (totalCountDatasets)="onCountDatasets($event)" [isActive]="currentType == 'datasets'"></app-recent-edited-dataset-activity>
|
|
||||||
<div *ngIf="totalDatasets === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
|
||||||
<div *ngIf="totalDatasets === 0" class="col-auto d-flex justify-content-center">
|
|
||||||
<button mat-raised-button class="add-dataset" (click)="addNewDataset()">
|
|
||||||
<mat-icon>add</mat-icon> {{'DASHBOARD.ACTIONS.ADD-DESCRIPTION' | translate}}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</mat-tab>
|
|
||||||
</mat-tab-group>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Right Sidebar -->
|
<div *ngIf="this.hasDmps()" class="col">
|
||||||
<div *ngIf="!this.hasDmps()" class="col-auto ml-auto stats">
|
<div class="latest-activity-title">{{'DASHBOARD.LATEST-ACTIVITY' | translate}}</div>
|
||||||
<div class="personal-usage">{{'DASHBOARD.PERSONAL-USAGE' | translate}}</div>
|
<mat-tab-group mat-align-tabs="start" class="remove-border-bottom" [selectedIndex]="indexFromCurrentType" (selectedTabChange)="currentType = $event.tab.ariaLabel">
|
||||||
<div class="counter-zero">0</div>
|
<!-- <mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}} ({{totalRecents}})">-->
|
||||||
<a [routerLink]="['/plans']" class="link">{{'DASHBOARD.DMPS' | translate}}</a>
|
<mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}}">
|
||||||
<div class="counter-zero">0</div>
|
<app-recent-edited-activity (totalCountRecentEdited)="onCountAllRecent($event)" [isActive]="currentType == 'recent'"></app-recent-edited-activity>
|
||||||
<a [routerLink]="['/datasets']" class="link">{{'DASHBOARD.DESCRIPTIONS' | translate}}</a>
|
<div *ngIf="totalRecents === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
<div class="counter-zero">0</div>
|
</mat-tab>
|
||||||
<a class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
<!-- <mat-tab aria-label="draft" label="{{'DASHBOARD.DRAFTS' | translate}} ({{totalDraftDatasets}})">-->
|
||||||
<div class="counter-zero">0</div>
|
<mat-tab aria-label="drafts" label="{{'DASHBOARD.DRAFTS' | translate}}">
|
||||||
<a class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
<app-drafts (totalCountDraftDatasets)="onCountDraftDatasets($event)" [isActive]="currentType == 'drafts'"></app-drafts>
|
||||||
</div>
|
<div *ngIf="totalDraftDatasets === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
|
</mat-tab>>
|
||||||
<div *ngIf="this.hasDmps()" class="col-auto stats">
|
<!-- <mat-tab aria-label="dmps" label="{{'DASHBOARD.DMPS' | translate}} ({{totalDmps}})">-->
|
||||||
<div class="personal-usage">{{'DASHBOARD.PERSONAL-USAGE' | translate}}</div>
|
<mat-tab aria-label="dmps" label="{{'DASHBOARD.DMPS' | translate}}">
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataManagementPlanCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataManagementPlanCount == 0}">
|
<app-recent-edited-dmp-activity (totalCountDmps)="onCountDmps($event)" [isActive]="currentType == 'dmps'"></app-recent-edited-dmp-activity>
|
||||||
{{dashboardStatisticsData?.totalDataManagementPlanCount}}</div>
|
<div *ngIf="totalDmps === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
<a [routerLink]="['/plans']" class="link">{{'DASHBOARD.DMPS' | translate}}</a>
|
</mat-tab>
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataSetCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataSetCount == 0}">
|
<!-- <mat-tab aria-label="datasets" label="{{'DASHBOARD.DESCRIPTIONS' | translate}} ({{totalDatasets}})">-->
|
||||||
{{dashboardStatisticsData?.totalDataSetCount}}</div>
|
<mat-tab aria-label="datasets" label="{{'DASHBOARD.DESCRIPTIONS' | translate}}">
|
||||||
<a [routerLink]="['/datasets']" class="link">{{'DASHBOARD.DESCRIPTIONS' | translate}}</a>
|
<app-recent-edited-dataset-activity (totalCountDatasets)="onCountDatasets($event)" [isActive]="currentType == 'datasets'"></app-recent-edited-dataset-activity>
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalGrantCount != 0, 'counter-zero': dashboardStatisticsData?.totalGrantCount == 0}">
|
<div *ngIf="totalDatasets === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
{{dashboardStatisticsData?.totalGrantCount}}</div>
|
<div *ngIf="totalDatasets === 0" class="col-auto d-flex justify-content-center">
|
||||||
<a href="#" class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
<button mat-raised-button class="add-dataset" (click)="addNewDataset()">
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalOrganisationCount != 0, 'counter-zero': dashboardStatisticsData?.totalOrganisationCount == 0}">
|
<mat-icon>add</mat-icon> {{'DASHBOARD.ACTIONS.ADD-DESCRIPTION' | translate}}
|
||||||
{{dashboardStatisticsData?.totalOrganisationCount}}</div>
|
</button>
|
||||||
<a href="#" class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
</div>
|
||||||
|
</mat-tab>
|
||||||
|
</mat-tab-group>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
<!-- Right Sidebar -->
|
||||||
|
<div *ngIf="!this.hasDmps()" class="col-auto ml-auto stats">
|
||||||
<div>
|
<div class="personal-usage">{{'DASHBOARD.PERSONAL-USAGE' | translate}}</div>
|
||||||
<div class="main-content">
|
<div class="counter-zero">0</div>
|
||||||
|
<a [routerLink]="['/plans']" class="link">{{'DASHBOARD.DMPS' | translate}}</a>
|
||||||
|
<div class="counter-zero">0</div>
|
||||||
|
<a [routerLink]="['/datasets']" class="link">{{'DASHBOARD.DESCRIPTIONS' | translate}}</a>
|
||||||
|
<div class="counter-zero">0</div>
|
||||||
|
<a class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
||||||
|
<div class="counter-zero">0</div>
|
||||||
|
<a class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="this.hasDmps()" class="col-auto stats">
|
||||||
|
<div class="personal-usage">{{'DASHBOARD.PERSONAL-USAGE' | translate}}</div>
|
||||||
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataManagementPlanCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataManagementPlanCount == 0}">
|
||||||
|
{{dashboardStatisticsData?.totalDataManagementPlanCount}}</div>
|
||||||
|
<a [routerLink]="['/plans']" class="link">{{'DASHBOARD.DMPS' | translate}}</a>
|
||||||
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataSetCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataSetCount == 0}">
|
||||||
|
{{dashboardStatisticsData?.totalDataSetCount}}</div>
|
||||||
|
<a [routerLink]="['/datasets']" class="link">{{'DASHBOARD.DESCRIPTIONS' | translate}}</a>
|
||||||
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalGrantCount != 0, 'counter-zero': dashboardStatisticsData?.totalGrantCount == 0}">
|
||||||
|
{{dashboardStatisticsData?.totalGrantCount}}</div>
|
||||||
|
<a href="#" class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
||||||
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalOrganisationCount != 0, 'counter-zero': dashboardStatisticsData?.totalOrganisationCount == 0}">
|
||||||
|
{{dashboardStatisticsData?.totalOrganisationCount}}</div>
|
||||||
|
<a href="#" class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Home screen on log out -->
|
<div>
|
||||||
<div class="col p-0" *ngIf="!this.isAuthenticated()">
|
<div class="main-content">
|
||||||
<div class="col-auto">
|
|
||||||
<!-- <div class="row">
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Home screen on log out -->
|
||||||
|
<div class="col p-0" *ngIf="!this.isAuthenticated()">
|
||||||
|
<div class="col-auto">
|
||||||
|
<!-- <div class="row">
|
||||||
<div class="col header-text-container">
|
<div class="col header-text-container">
|
||||||
<h3>{{ 'ABOUT.WELCOME' | translate }}</h3>
|
<h3>{{ 'ABOUT.WELCOME' | translate }}</h3>
|
||||||
<h4>{{ 'ABOUT.WELCOME-MESSAGE' | translate }}</h4>
|
<h4>{{ 'ABOUT.WELCOME-MESSAGE' | translate }}</h4>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col d-flex flex-column">
|
<div class="col d-flex flex-column">
|
||||||
<div class="card non-auth-card" [style.display]="isVisible ? 'block' : 'none'">
|
<div class="card non-auth-card" [style.display]="isVisible ? 'block' : 'none'">
|
||||||
<a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto mt-3 material-icons clear-icon">clear</span></a>
|
<a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto mt-3 material-icons clear-icon">clear</span></a>
|
||||||
<div class="d-flex flex-column align-items-center non-auth-title-container">
|
<div class="d-flex flex-column align-items-center non-auth-title-container">
|
||||||
<h4 class="pt-4">{{'DASHBOARD.TITLE' | translate}}</h4>
|
<h4 class="pt-4">{{'DASHBOARD.TITLE' | translate}}</h4>
|
||||||
<p class="col-auto app-info">{{'DASHBOARD.INFO-TEXT' | translate}}</p>
|
<p class="col-auto app-info">{{'DASHBOARD.INFO-TEXT' | translate}}</p>
|
||||||
</div>
|
|
||||||
<div class="d-flex">
|
|
||||||
<!-- <button type="button" class="col-auto align-self-center normal-btn" (click)="openNewDmpDialog()">{{'DASHBOARD.START-YOUR-FIRST-DMP' | translate}}</button> -->
|
|
||||||
<img class="col-auto ml-auto laptop-img" src="../../../assets/images/dashboard-popup.png">
|
|
||||||
<!-- <img class="col-auto ml-auto laptop-img"> -->
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="hasDmps()" class="col activity">
|
<div class="d-flex">
|
||||||
<div class="latest-activity-title">{{'DASHBOARD.LATEST-ACTIVITY' | translate}}</div>
|
<!-- <button type="button" class="col-auto align-self-center normal-btn" (click)="openNewDmpDialog()">{{'DASHBOARD.START-YOUR-FIRST-DMP' | translate}}</button> -->
|
||||||
<mat-tab-group mat-align-tabs="start" class="remove-border-bottom" (
|
<img class="col-auto ml-auto laptop-img" src="../../../assets/images/dashboard-popup.png">
|
||||||
[selectedIndex]="indexFromCurrentType" selectedTabChange)="currentType = $event.tab.ariaLabel">
|
<!-- <img class="col-auto ml-auto laptop-img"> -->
|
||||||
<!-- <mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}} ({{totalRecents}})">-->
|
</div>
|
||||||
<mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}}">
|
</div>
|
||||||
<app-recent-edited-activity (totalCountRecentEdited)="onCountAllRecent($event)" [isActive]="currentType == 'recent'"></app-recent-edited-activity>
|
<div *ngIf="hasDmps()" class="col activity">
|
||||||
<div *ngIf="totalRecents === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
<div class="latest-activity-title">{{'DASHBOARD.LATEST-ACTIVITY' | translate}}</div>
|
||||||
</mat-tab>
|
<mat-tab-group mat-align-tabs="start" class="remove-border-bottom" ( [selectedIndex]="indexFromCurrentType" selectedTabChange)="currentType = $event.tab.ariaLabel">
|
||||||
<!-- <mat-tab aria-label="dmps" label="{{'DASHBOARD.PUBLIC-DMPS' | translate}} ({{totalDmps}})">-->
|
<!-- <mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}} ({{totalRecents}})">-->
|
||||||
<mat-tab aria-label="dmps" label="{{'DASHBOARD.PUBLIC-DMPS' | translate}}">
|
<mat-tab aria-label="recent" label="{{'DASHBOARD.ALL' | translate}}">
|
||||||
<app-recent-edited-dmp-activity (totalCountDmps)="onCountDmps($event)" [isActive]="currentType == 'dmps'"></app-recent-edited-dmp-activity>
|
<app-recent-edited-activity (totalCountRecentEdited)="onCountAllRecent($event)" [isActive]="currentType == 'recent'"></app-recent-edited-activity>
|
||||||
<div *ngIf="totalDmps === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
<div *ngIf="totalRecents === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<!-- <mat-tab aria-label="datasets" label="{{'DASHBOARD.PUBLIC-DATASETS' | translate}} ({{totalDatasets}})">-->
|
<!-- <mat-tab aria-label="dmps" label="{{'DASHBOARD.PUBLIC-DMPS' | translate}} ({{totalDmps}})">-->
|
||||||
<mat-tab aria-label="datasets" label="{{'DASHBOARD.PUBLIC-DATASETS' | translate}}">
|
<mat-tab aria-label="dmps" label="{{'DASHBOARD.PUBLIC-DMPS' | translate}}">
|
||||||
<app-recent-edited-dataset-activity (totalCountDatasets)="onCountDatasets($event)" [isActive]="currentType == 'datasets'"></app-recent-edited-dataset-activity>
|
<app-recent-edited-dmp-activity (totalCountDmps)="onCountDmps($event)" [isActive]="currentType == 'dmps'"></app-recent-edited-dmp-activity>
|
||||||
<div *ngIf="totalDatasets === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
<div *ngIf="totalDmps === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
<!-- <div *ngIf="totalDatasets === 0" class="col-auto d-flex justify-content-center">
|
</mat-tab>
|
||||||
|
<!-- <mat-tab aria-label="datasets" label="{{'DASHBOARD.PUBLIC-DATASETS' | translate}} ({{totalDatasets}})">-->
|
||||||
|
<mat-tab aria-label="datasets" label="{{'DASHBOARD.PUBLIC-DATASETS' | translate}}">
|
||||||
|
<app-recent-edited-dataset-activity (totalCountDatasets)="onCountDatasets($event)" [isActive]="currentType == 'datasets'"></app-recent-edited-dataset-activity>
|
||||||
|
<div *ngIf="totalDatasets === 0" class="empty-list">{{'DASHBOARD.EMPTY-LIST' | translate}}</div>
|
||||||
|
<!-- <div *ngIf="totalDatasets === 0" class="col-auto d-flex justify-content-center">
|
||||||
<button mat-raised-button class="add-dataset" [routerLink]="['/datasets/new']">
|
<button mat-raised-button class="add-dataset" [routerLink]="['/datasets/new']">
|
||||||
<mat-icon>add</mat-icon> {{'DASHBOARD.ACTIONS.ADD-DESCRIPTION' | translate}}
|
<mat-icon>add</mat-icon> {{'DASHBOARD.ACTIONS.ADD-DESCRIPTION' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</div> -->
|
</div> -->
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
</mat-tab-group>
|
</mat-tab-group>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
</div>
|
||||||
<div *ngIf="!hasDmps()" class="ml-auto pl-4 personal-usage-block">
|
<div class="col-auto">
|
||||||
<div class="personal-usage">{{'DASHBOARD.PUBLIC-USAGE' | translate}}</div>
|
<div *ngIf="!hasDmps()" class="ml-auto pl-4 personal-usage-block">
|
||||||
<div class="counter-zero">0</div>
|
<div class="personal-usage">{{'DASHBOARD.PUBLIC-USAGE' | translate}}</div>
|
||||||
<a>{{'DASHBOARD.PUBLIC-DMPS' | translate}}</a>
|
<div class="counter-zero">0</div>
|
||||||
<div class="counter-zero">0</div>
|
<a>{{'DASHBOARD.PUBLIC-DMPS' | translate}}</a>
|
||||||
<a>{{'DASHBOARD.PUBLIC-DATASETS' | translate}}</a>
|
<div class="counter-zero">0</div>
|
||||||
<div class="counter-zero">0</div>
|
<a>{{'DASHBOARD.PUBLIC-DATASETS' | translate}}</a>
|
||||||
<a class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
<div class="counter-zero">0</div>
|
||||||
<div class="counter-zero">0</div>
|
<a class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
||||||
<a class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
<div class="counter-zero">0</div>
|
||||||
</div>
|
<a class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
||||||
<div *ngIf="hasDmps()" class="ml-auto stats">
|
</div>
|
||||||
<div class="personal-usage">{{'DASHBOARD.PUBLIC-USAGE' | translate}}</div>
|
<div *ngIf="hasDmps()" class="ml-auto stats">
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataManagementPlanCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataManagementPlanCount == 0}">
|
<div class="personal-usage">{{'DASHBOARD.PUBLIC-USAGE' | translate}}</div>
|
||||||
{{dashboardStatisticsData?.totalDataManagementPlanCount}}</div>
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataManagementPlanCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataManagementPlanCount == 0}">
|
||||||
<a [routerLink]="['/plans']" class="link">{{'DASHBOARD.PUBLIC-DMPS' | translate}}</a>
|
{{dashboardStatisticsData?.totalDataManagementPlanCount}}</div>
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataSetCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataSetCount == 0}">
|
<a [routerLink]="['/plans']" class="link">{{'DASHBOARD.PUBLIC-DMPS' | translate}}</a>
|
||||||
{{dashboardStatisticsData?.totalDataSetCount}}</div>
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalDataSetCount != 0, 'counter-zero': dashboardStatisticsData?.totalDataSetCount == 0}">
|
||||||
<a [routerLink]="['/datasets']" class="link">{{'DASHBOARD.PUBLIC-DATASETS' | translate}}</a>
|
{{dashboardStatisticsData?.totalDataSetCount}}</div>
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalGrantCount != 0, 'counter-zero': dashboardStatisticsData?.totalGrantCount == 0}">
|
<a [routerLink]="['/datasets']" class="link">{{'DASHBOARD.PUBLIC-DATASETS' | translate}}</a>
|
||||||
{{dashboardStatisticsData?.totalGrantCount}}</div>
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalGrantCount != 0, 'counter-zero': dashboardStatisticsData?.totalGrantCount == 0}">
|
||||||
<a href="#" class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
{{dashboardStatisticsData?.totalGrantCount}}</div>
|
||||||
<div [ngClass]="{'counter': dashboardStatisticsData?.totalOrganisationCount != 0, 'counter-zero': dashboardStatisticsData?.totalOrganisationCount == 0}">
|
<a href="#" class="link-disabled">{{'DASHBOARD.GRANTS' | translate}}</a>
|
||||||
{{dashboardStatisticsData?.totalOrganisationCount}}</div>
|
<div [ngClass]="{'counter': dashboardStatisticsData?.totalOrganisationCount != 0, 'counter-zero': dashboardStatisticsData?.totalOrganisationCount == 0}">
|
||||||
<a href="#" class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
{{dashboardStatisticsData?.totalOrganisationCount}}</div>
|
||||||
</div>
|
<a href="#" class="link-disabled">{{'DASHBOARD.RELATED-ORGANISATIONS' | translate}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -188,10 +206,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <div class="header-image">
|
<!-- <div class="header-image">
|
||||||
<div class="header-text-container">
|
<div class="header-text-container">
|
||||||
<h3>{{ 'ABOUT.WELCOME' | translate }}</h3>
|
<h3>{{ 'ABOUT.WELCOME' | translate }}</h3>
|
||||||
<h4>{{ 'ABOUT.WELCOME-MESSAGE' | translate }}</h4>
|
<h4>{{ 'ABOUT.WELCOME-MESSAGE' | translate }}</h4>
|
||||||
|
@ -291,4 +310,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
|
@ -396,7 +396,7 @@ input[type="text"] {
|
||||||
|
|
||||||
.add-dataset-btn {
|
.add-dataset-btn {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
margin-left: 40px;
|
margin-left: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:host ::ng-deep .mat-tab-group.mat-primary .mat-ink-bar,
|
:host ::ng-deep .mat-tab-group.mat-primary .mat-ink-bar,
|
||||||
|
@ -425,6 +425,87 @@ input[type="text"] {
|
||||||
padding: 0.3rem 0rem 0.6rem 0rem !important;
|
padding: 0.3rem 0rem 0.6rem 0rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.new-releases-hint-container {
|
||||||
|
padding-left: 40px;
|
||||||
|
/* padding-top: 40px; */
|
||||||
|
padding-right: 55px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-releases-card {
|
||||||
|
box-shadow: 0px 3px 6px #00000029;
|
||||||
|
max-width: 712px;
|
||||||
|
min-width: 17.5rem;
|
||||||
|
margin-top: 0rem;
|
||||||
|
margin-bottom: 3.75rem;
|
||||||
|
|
||||||
|
background: transparent linear-gradient(127deg, #EDAEB3 0%, #E1368A 100%) 0% 0% no-repeat padding-box;
|
||||||
|
border-radius: 6px;
|
||||||
|
opacity: 1;
|
||||||
|
padding-bottom: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-releases-btn {
|
||||||
|
height: 40px;
|
||||||
|
margin-left: 40px;
|
||||||
|
|
||||||
|
background: var(--primary-color) 0% 0% no-repeat padding-box;
|
||||||
|
border-radius: 30px;
|
||||||
|
opacity: 1;
|
||||||
|
color: #FFFFFF;
|
||||||
|
padding-right: 2em;
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-releases-chip {
|
||||||
|
// margin-bottom: 1em;
|
||||||
|
// margin-left: 2.5em;
|
||||||
|
// margin-right: 2.5em;
|
||||||
|
color: #fff;
|
||||||
|
/* text-transform: uppercase; */
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 500;
|
||||||
|
/* max-width: 160px; */
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
background: #EAEAEA 0% 0% no-repeat padding-box;
|
||||||
|
border-radius: 30px;
|
||||||
|
opacity: 0.7;
|
||||||
|
/* font: normal normal bold 12px/21px Aileron; */
|
||||||
|
letter-spacing: 0.12px;
|
||||||
|
color: #6E6E6E;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-releases-title {
|
||||||
|
text-align: left;
|
||||||
|
font: Bold 30px/34px Roboto;
|
||||||
|
letter-spacing: 0px;
|
||||||
|
color: #212121;
|
||||||
|
padding-left: 40px;
|
||||||
|
/* padding-top: 40px; */
|
||||||
|
padding-right: 55px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-releases-content {
|
||||||
|
text-align: left;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 1rem;
|
||||||
|
letter-spacing: 0px;
|
||||||
|
color: #212121;
|
||||||
|
padding-left: 40px;
|
||||||
|
font: normal normal normal 16px/24px Roboto;
|
||||||
|
padding-top: 36px;
|
||||||
|
padding-right: 55px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-releases-logo {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* ::ng-deep .mat-tab-group {
|
/* ::ng-deep .mat-tab-group {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,9 @@ import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/serv
|
||||||
import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service';
|
import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service';
|
||||||
import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants';
|
import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants';
|
||||||
import { MatomoService } from '@app/core/services/matomo/matomo-service';
|
import { MatomoService } from '@app/core/services/matomo/matomo-service';
|
||||||
|
import { ConfigurationService } from '@app/core/services/configuration/configuration.service';
|
||||||
|
import * as moment from 'moment';
|
||||||
|
import { CookieService } from 'ngx-cookie-service';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -73,6 +76,7 @@ export class DashboardComponent extends BaseComponent implements OnInit, IBreadC
|
||||||
importFileText: string;
|
importFileText: string;
|
||||||
startWizardText: string;
|
startWizardText: string;
|
||||||
currentType: string = "recent";
|
currentType: string = "recent";
|
||||||
|
newReleaseNotificationVisible = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private router: Router,
|
private router: Router,
|
||||||
|
@ -89,7 +93,9 @@ export class DashboardComponent extends BaseComponent implements OnInit, IBreadC
|
||||||
private language: TranslateService,
|
private language: TranslateService,
|
||||||
private uiNotificationService: UiNotificationService,
|
private uiNotificationService: UiNotificationService,
|
||||||
private guidedTourService: GuidedTourService,
|
private guidedTourService: GuidedTourService,
|
||||||
private matomoService: MatomoService
|
private matomoService: MatomoService,
|
||||||
|
private cookieService: CookieService,
|
||||||
|
public configurationService: ConfigurationService
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
// this.dashboardStatisticsData.totalDataManagementPlanCount = 0;
|
// this.dashboardStatisticsData.totalDataManagementPlanCount = 0;
|
||||||
|
@ -154,6 +160,8 @@ export class DashboardComponent extends BaseComponent implements OnInit, IBreadC
|
||||||
this.filteredOptions = this.searchControl.valueChanges.pipe(mergeMap(x => {
|
this.filteredOptions = this.searchControl.valueChanges.pipe(mergeMap(x => {
|
||||||
return this.searchBarService.search(x);
|
return this.searchBarService.search(x);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
this.newReleaseNotificationVisible = this.isNewReleaseNotificationVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
public get indexFromCurrentType() {
|
public get indexFromCurrentType() {
|
||||||
|
@ -400,4 +408,26 @@ export class DashboardComponent extends BaseComponent implements OnInit, IBreadC
|
||||||
// viewAllPublicDatasetsClicked() {
|
// viewAllPublicDatasetsClicked() {
|
||||||
// this.router.navigate(['explore']);
|
// this.router.navigate(['explore']);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
dismissNewReleaseNotification() {
|
||||||
|
this.cookieService.set('new-release-dismiss-' + this.configurationService.newReleaseNotificationVersionCode, 'true', 5000, null, null, false, 'Lax');
|
||||||
|
this.newReleaseNotificationVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isNewReleaseNotificationVisible() {
|
||||||
|
if (this.configurationService.newReleaseNotificationVersionCode == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (this.configurationService.newReleaseNotificationExpires == null && this.configurationService.newReleaseNotificationLink == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (this.configurationService.newReleaseNotificationExpires != null && moment(this.configurationService.newReleaseNotificationExpires).tz('UTC') < moment.utc()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (this.cookieService.get('new-release-dismiss-' + this.configurationService.newReleaseNotificationVersionCode) === 'true') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -296,7 +296,6 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme
|
||||||
const request: DataTableRequest<DatasetProfileCriteria> = new DataTableRequest<DatasetProfileCriteria>(null, null, null);
|
const request: DataTableRequest<DatasetProfileCriteria> = new DataTableRequest<DatasetProfileCriteria>(null, null, null);
|
||||||
request.criteria = new DatasetProfileCriteria();
|
request.criteria = new DatasetProfileCriteria();
|
||||||
request.criteria.ids = [];
|
request.criteria.ids = [];
|
||||||
result.definition.sections[this.dmpSectionIndex].descriptionTemplates.forEach(template => request.criteria.ids.push(template.descriptionTemplateId));
|
|
||||||
this.availableDescriptionTemplates.forEach(template => request.criteria.ids.push(template.id));
|
this.availableDescriptionTemplates.forEach(template => request.criteria.ids.push(template.id));
|
||||||
this.datasetService.getDatasetProfilesWithPrefilling(request)
|
this.datasetService.getDatasetProfilesWithPrefilling(request)
|
||||||
.pipe(takeUntil(this._destroyed))
|
.pipe(takeUntil(this._destroyed))
|
||||||
|
@ -364,7 +363,6 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme
|
||||||
this.lockService.checkLockStatus(data.id).pipe(takeUntil(this._destroyed)).subscribe(lockStatus => {
|
this.lockService.checkLockStatus(data.id).pipe(takeUntil(this._destroyed)).subscribe(lockStatus => {
|
||||||
this.lockStatus = lockStatus;
|
this.lockStatus = lockStatus;
|
||||||
this.datasetWizardModel = new DatasetWizardEditorModel().fromModel(data);
|
this.datasetWizardModel = new DatasetWizardEditorModel().fromModel(data);
|
||||||
this.dmpSectionIndex = this.datasetWizardModel.dmpSectionIndex;
|
|
||||||
this.datasetWizardModel.status = 0;
|
this.datasetWizardModel.status = 0;
|
||||||
this.formGroup = this.datasetWizardModel.buildForm();
|
this.formGroup = this.datasetWizardModel.buildForm();
|
||||||
this.formGroup.get('id').setValue(null);
|
this.formGroup.get('id').setValue(null);
|
||||||
|
@ -375,6 +373,10 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme
|
||||||
this.datasetWizardModel.dmp = data;
|
this.datasetWizardModel.dmp = data;
|
||||||
this.formGroup.get('dmp').setValue(this.datasetWizardModel.dmp);
|
this.formGroup.get('dmp').setValue(this.datasetWizardModel.dmp);
|
||||||
this.formGroupRawValue = JSON.parse(JSON.stringify(this.formGroup.getRawValue()));
|
this.formGroupRawValue = JSON.parse(JSON.stringify(this.formGroup.getRawValue()));
|
||||||
|
const descipptionTemplateiNNewDmp:DmpDatasetProfile = this.datasetWizardModel.dmp?.profiles?.find(x => x.descriptionTemplateId === this.datasetWizardModel.profile.id);
|
||||||
|
|
||||||
|
this.dmpSectionIndex = descipptionTemplateiNNewDmp?.data?.dmpSectionIndex?.length > 0 ? descipptionTemplateiNNewDmp?.data?.dmpSectionIndex[0] : 0;
|
||||||
|
this.formGroup.get('dmpSectionIndex').setValue(this.dmpSectionIndex);
|
||||||
|
|
||||||
this.loadDatasetProfiles();
|
this.loadDatasetProfiles();
|
||||||
this.breadCrumbs = observableOf([
|
this.breadCrumbs = observableOf([
|
||||||
|
|
|
@ -51,9 +51,9 @@
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<ul *ngIf="hasProfile(i)" class="add-dataset-option">
|
<ul *ngIf="dmp?.id && hasProfile(i)" class="add-dataset-option">
|
||||||
<li>
|
<li>
|
||||||
<a class="add-dataset-action" (click)="addDataset(i)">
|
<a class="add-dataset-action" [routerLink]="['/datasets/new/' + dmp.id + '/' + i]">
|
||||||
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DESCRIPTION-FOR-SECTION' | translate}}
|
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DESCRIPTION-FOR-SECTION' | translate}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
<div class="col-auto formForStep0" id="editor-form" *ngIf="this.step === 0 && this.isNew">
|
<div class="col-auto formForStep0" id="editor-form" *ngIf="this.step === 0 && this.isNew">
|
||||||
<div class="col-12 blueprint-section" [hidden]="this.step !== 0">
|
<div class="col-12 blueprint-section" [hidden]="this.step !== 0">
|
||||||
<div class="">
|
<div class="">
|
||||||
<div class="heading2">0.1 Title of DMP *</div>
|
<div class="heading2">Title of DMP *</div>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>Title</mat-label>
|
<mat-label>Title</mat-label>
|
||||||
<input matInput type="text" name="label" [formControl]="formGroup.get('label')" required>
|
<input matInput type="text" name="label" [formControl]="formGroup.get('label')" required>
|
||||||
|
@ -95,13 +95,13 @@
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
<div class="">
|
<div class="">
|
||||||
<div class="heading2">0.2 Description of DMP *</div>
|
<div class="heading2">Description of DMP *</div>
|
||||||
<rich-text-editor-component [parentFormGroup]="formGroup" [controlName]="'description'"
|
<rich-text-editor-component [parentFormGroup]="formGroup" [controlName]="'description'"
|
||||||
[placeholder]="'Fill with description'" [required]="true">
|
[placeholder]="'Fill with description'" [required]="true">
|
||||||
</rich-text-editor-component>
|
</rich-text-editor-component>
|
||||||
</div>
|
</div>
|
||||||
<div class="" style="margin-top: 3%;">
|
<div class="" style="margin-top: 3%;">
|
||||||
<div class="heading2">0.3 Blueprint of DMP *</div>
|
<div class="heading2">Blueprint of DMP *</div>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>Select blueprint</mat-label>
|
<mat-label>Select blueprint</mat-label>
|
||||||
<app-single-auto-complete [required]="false" [formControl]="formGroup.get('profile')" placeholder="Select blueprint" [configuration]="dmpBlueprintAutoCompleteConfiguration">
|
<app-single-auto-complete [required]="false" [formControl]="formGroup.get('profile')" placeholder="Select blueprint" [configuration]="dmpBlueprintAutoCompleteConfiguration">
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
<div *ngIf="field.category === 'SYSTEM'">
|
<div *ngIf="field.category === 'SYSTEM'">
|
||||||
<div *ngIf="field.type == 0">
|
<div *ngIf="field.type == 0">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput placeholder="{{'DMP-EDITOR.FIELDS.NAME' | translate}}" type="text" name="label" [formControl]="formGroup.get('label')" required>
|
<input matInput placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.NAME' | translate)}}" type="text" name="label" [formControl]="formGroup.get('label')" required>
|
||||||
<mat-error *ngIf="formGroup.get('label').hasError('backendError')">
|
<mat-error *ngIf="formGroup.get('label').hasError('backendError')">
|
||||||
{{formGroup.get('label').getError('backendError').message}}</mat-error>
|
{{formGroup.get('label').getError('backendError').message}}</mat-error>
|
||||||
<mat-error *ngIf="formGroup.get('label').hasError('required')">
|
<mat-error *ngIf="formGroup.get('label').hasError('required')">
|
||||||
|
@ -151,12 +151,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 1">
|
<div *ngIf="field.type == 1">
|
||||||
<rich-text-editor-component [parentFormGroup]="formGroup" [controlName]="'description'"
|
<rich-text-editor-component [parentFormGroup]="formGroup" [controlName]="'description'"
|
||||||
[placeholder]="'DMP-EDITOR.PLACEHOLDER.DESCRIPTION'" [required]="field.required">
|
[placeholder]="field?.placeholder?.length > 0 ? field.placeholder : 'DMP-EDITOR.PLACEHOLDER.DESCRIPTION'" [required]="field.required">
|
||||||
</rich-text-editor-component>
|
</rich-text-editor-component>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 2">
|
<div *ngIf="field.type == 2">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>{{'DMP-EDITOR.PLACEHOLDER.RESEARCHERS' | translate}}</mat-label>
|
<mat-label>{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.PLACEHOLDER.RESEARCHERS' | translate)}}</mat-label>
|
||||||
<app-multiple-auto-complete [formControl]="formGroup.get('researchers')" [configuration]="researchersAutoCompleteConfiguration">
|
<app-multiple-auto-complete [formControl]="formGroup.get('researchers')" [configuration]="researchersAutoCompleteConfiguration">
|
||||||
</app-multiple-auto-complete>
|
</app-multiple-auto-complete>
|
||||||
<mat-error *ngIf="formGroup.get('researchers').hasError('backendError')">
|
<mat-error *ngIf="formGroup.get('researchers').hasError('backendError')">
|
||||||
|
@ -174,7 +174,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 3">
|
<div *ngIf="field.type == 3">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>{{'DMP-EDITOR.PLACEHOLDER.ORGANIZATION' | translate}}</mat-label>
|
<mat-label>{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.PLACEHOLDER.ORGANIZATION' | translate)}}</mat-label>
|
||||||
<app-multiple-auto-complete [formControl]="formGroup.get('organisations')" [configuration]="organisationsAutoCompleteConfiguration">
|
<app-multiple-auto-complete [formControl]="formGroup.get('organisations')" [configuration]="organisationsAutoCompleteConfiguration">
|
||||||
</app-multiple-auto-complete>
|
</app-multiple-auto-complete>
|
||||||
<mat-error *ngIf="formGroup.get('organisations').hasError('backendError')">
|
<mat-error *ngIf="formGroup.get('organisations').hasError('backendError')">
|
||||||
|
@ -191,7 +191,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 4">
|
<div *ngIf="field.type == 4">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select [formControl]="formGroup.get('extraProperties').get('language')" placeholder="{{'DMP-EDITOR.FIELDS.LANGUAGE' | translate}}" required>
|
<mat-select [formControl]="formGroup.get('extraProperties').get('language')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.LANGUAGE' | translate)}}" required>
|
||||||
<mat-option *ngFor="let lang of getLanguageInfos()" [value]="lang.code">
|
<mat-option *ngFor="let lang of getLanguageInfos()" [value]="lang.code">
|
||||||
{{ lang.name }}
|
{{ lang.name }}
|
||||||
</mat-option>
|
</mat-option>
|
||||||
|
@ -205,7 +205,7 @@
|
||||||
<div *ngIf="field.type == 5">
|
<div *ngIf="field.type == 5">
|
||||||
<div class="contact-form">
|
<div class="contact-form">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select [formControl]="formGroup.get('extraProperties').get('contact')" placeholder="{{'DMP-EDITOR.FIELDS.CONTACT' | translate}}">
|
<mat-select [formControl]="formGroup.get('extraProperties').get('contact')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.CONTACT' | translate)}}">
|
||||||
<mat-option *ngFor="let vis of getAssociates()" [value]="vis.id">
|
<mat-option *ngFor="let vis of getAssociates()" [value]="vis.id">
|
||||||
{{vis.name | translate}}
|
{{vis.name | translate}}
|
||||||
</mat-option>
|
</mat-option>
|
||||||
|
@ -218,17 +218,17 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 6">
|
<div *ngIf="field.type == 6">
|
||||||
<funding-info [formGroup]="formGroup" [grantformGroup]="formGroup.get('grant')" [projectFormGroup]="formGroup.get('project')" [funderFormGroup]="formGroup.get('funder')" [isFinalized]="isFinalized" [isNew]="isNew" [isUserOwner]="isUserOwner" [isRequired]="field.required" [type]="1" (onFormChanged)="formChanged()"></funding-info>
|
<funding-info [formGroup]="formGroup" [grantformGroup]="formGroup.get('grant')" [projectFormGroup]="formGroup.get('project')" [funderFormGroup]="formGroup.get('funder')" [isFinalized]="isFinalized" [isNew]="isNew" [isUserOwner]="isUserOwner" [isRequired]="field.required" [field]="field" [type]="1" (onFormChanged)="formChanged()"></funding-info>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 7">
|
<div *ngIf="field.type == 7">
|
||||||
<funding-info [formGroup]="formGroup" [grantformGroup]="formGroup.get('grant')" [projectFormGroup]="formGroup.get('project')" [funderFormGroup]="formGroup.get('funder')" [isFinalized]="isFinalized" [isNew]="isNew" [isUserOwner]="isUserOwner" [isRequired]="field.required" [type]="2" (onFormChanged)="formChanged()"></funding-info>
|
<funding-info [formGroup]="formGroup" [grantformGroup]="formGroup.get('grant')" [projectFormGroup]="formGroup.get('project')" [funderFormGroup]="formGroup.get('funder')" [isFinalized]="isFinalized" [isNew]="isNew" [isUserOwner]="isUserOwner" [isRequired]="field.required" [field]="field" [type]="2" (onFormChanged)="formChanged()"></funding-info>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 8">
|
<div *ngIf="field.type == 8">
|
||||||
<funding-info [formGroup]="formGroup" [grantformGroup]="formGroup.get('grant')" [projectFormGroup]="formGroup.get('project')" [funderFormGroup]="formGroup.get('funder')" [isFinalized]="isFinalized" [isNew]="isNew" [isUserOwner]="isUserOwner" [isRequired]="field.required" [type]="3" (onFormChanged)="formChanged()"></funding-info>
|
<funding-info [formGroup]="formGroup" [grantformGroup]="formGroup.get('grant')" [projectFormGroup]="formGroup.get('project')" [funderFormGroup]="formGroup.get('funder')" [isFinalized]="isFinalized" [isNew]="isNew" [isUserOwner]="isUserOwner" [isRequired]="field.required" [field]="field" [type]="3" (onFormChanged)="formChanged()"></funding-info>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 9">
|
<div *ngIf="field.type == 9">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<app-single-auto-complete [formControl]="formGroup.get('extraProperties').get('license')" placeholder="{{'DMP-EDITOR.FIELDS.LICENSE' | translate}}" [configuration]="licenseAutoCompleteConfiguration">
|
<app-single-auto-complete [formControl]="formGroup.get('extraProperties').get('license')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.LICENSE' | translate)}}" [configuration]="licenseAutoCompleteConfiguration">
|
||||||
</app-single-auto-complete>
|
</app-single-auto-complete>
|
||||||
<mat-error *ngIf="formGroup.get('extraProperties').get('license').hasError('backendError')">
|
<mat-error *ngIf="formGroup.get('extraProperties').get('license').hasError('backendError')">
|
||||||
{{formGroup.get('extraProperties').get('license').getError('backendError').message}}</mat-error>
|
{{formGroup.get('extraProperties').get('license').getError('backendError').message}}</mat-error>
|
||||||
|
@ -238,7 +238,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="field.type == 10">
|
<div *ngIf="field.type == 10">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select [formControl]="formGroup.get('extraProperties').get('visible')" placeholder="{{'DMP-EDITOR.FIELDS.VISIBILITY' | translate}}">
|
<mat-select [formControl]="formGroup.get('extraProperties').get('visible')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.VISIBILITY' | translate)}}">
|
||||||
<mat-option *ngFor="let vis of visibles" [value]="vis.value">
|
<mat-option *ngFor="let vis of visibles" [value]="vis.value">
|
||||||
{{vis.name | translate}}
|
{{vis.name | translate}}
|
||||||
</mat-option>
|
</mat-option>
|
||||||
|
@ -309,7 +309,7 @@
|
||||||
<div class="heading">Description templates</div>
|
<div class="heading">Description templates</div>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>{{'DMP-EDITOR.FIELDS.SELECT-TEMPLATE' | translate}}</mat-label>
|
<mat-label>{{'DMP-EDITOR.FIELDS.SELECT-TEMPLATE' | translate}}</mat-label>
|
||||||
<app-multiple-auto-complete placeholder="{{'DMP-EDITOR.FIELDS.SELECT-TEMPLATE' | translate}}" [hidePlaceholder]="true" required='true' [value]="sectionTemplates[section.ordinal - 1]" [configuration]="profilesAutoCompleteConfiguration" (optionRemoved)="onRemoveTemplate($event, i)" (optionActionClicked)="onPreviewTemplate($event, i)" (optionSelected)="onOptionSelected($event, i)">
|
<app-multiple-auto-complete placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.SELECT-TEMPLATE' | translate)}}" [hidePlaceholder]="true" required='true' [value]="sectionTemplates[section.ordinal - 1]" [configuration]="profilesAutoCompleteConfiguration" (optionRemoved)="onRemoveTemplate($event, i)" (optionActionClicked)="onPreviewTemplate($event, i)" (optionSelected)="onOptionSelected($event, i)">
|
||||||
</app-multiple-auto-complete>
|
</app-multiple-auto-complete>
|
||||||
<mat-error *ngIf="formGroup.get('profiles').hasError('backendError')">
|
<mat-error *ngIf="formGroup.get('profiles').hasError('backendError')">
|
||||||
{{formGroup.get('profiles').getError('backendError').message}}</mat-error>
|
{{formGroup.get('profiles').getError('backendError').message}}</mat-error>
|
||||||
|
|
|
@ -425,5 +425,13 @@ a:hover {
|
||||||
|
|
||||||
::ng-deep .input-form .mat-form-field-appearance-outline .mat-form-field-infix {
|
::ng-deep .input-form .mat-form-field-appearance-outline .mat-form-field-infix {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
padding: 0.6em 0 1em 0 !important;
|
// padding: 0.6em 0 1em 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
|
||||||
|
padding: 1em 0 1em 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
|
||||||
|
// padding: 0rem 0rem 0.4rem 0rem !important;
|
||||||
|
// }
|
|
@ -57,6 +57,7 @@ import { GrantEditorModel } from '@app/ui/grant/editor/grant-editor.model';
|
||||||
import { CheckDeactivateBaseComponent } from '@app/library/deactivate/deactivate.component';
|
import { CheckDeactivateBaseComponent } from '@app/library/deactivate/deactivate.component';
|
||||||
import { DmpProfileStatus } from '@app/core/common/enum/dmp-profile-status';
|
import { DmpProfileStatus } from '@app/core/common/enum/dmp-profile-status';
|
||||||
import { DatasetService } from '@app/core/services/dataset/dataset.service';
|
import { DatasetService } from '@app/core/services/dataset/dataset.service';
|
||||||
|
import { runInThisContext } from 'vm';
|
||||||
|
|
||||||
interface Visible {
|
interface Visible {
|
||||||
value: boolean;
|
value: boolean;
|
||||||
|
@ -230,7 +231,8 @@ export class DmpEditorBlueprintComponent extends CheckDeactivateBaseComponent im
|
||||||
displayFn: (item) => item['label'],
|
displayFn: (item) => item['label'],
|
||||||
titleFn: (item) => item['label'],
|
titleFn: (item) => item['label'],
|
||||||
subtitleFn: (item) => item['description'],
|
subtitleFn: (item) => item['description'],
|
||||||
popupItemActionIcon: 'visibility'
|
popupItemActionIcon: 'visibility',
|
||||||
|
canRemoveItem: (item) => this.canRemoveItem(item)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,7 +486,7 @@ export class DmpEditorBlueprintComponent extends CheckDeactivateBaseComponent im
|
||||||
}
|
}
|
||||||
|
|
||||||
hasProfile(sectionIndex: number): boolean {
|
hasProfile(sectionIndex: number): boolean {
|
||||||
return this.formGroup.get('profiles') && this.formGroup.get('profiles').value && this.formGroup.get('profiles').value.some(x => x.data.dmpSectionIndex.includes(sectionIndex));
|
return this.formGroup.get('profiles') && this.formGroup.get('profiles').value && this.formGroup.get('profiles').value.some(x => x.data?.dmpSectionIndex?.includes(sectionIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
addDataset(dmpSectionIndex: number) {
|
addDataset(dmpSectionIndex: number) {
|
||||||
|
@ -915,7 +917,7 @@ export class DmpEditorBlueprintComponent extends CheckDeactivateBaseComponent im
|
||||||
}
|
}
|
||||||
const templates: Array<DmpDatasetProfile> = new Array<DmpDatasetProfile>();
|
const templates: Array<DmpDatasetProfile> = new Array<DmpDatasetProfile>();
|
||||||
this.selectedDmpBlueprintDefinition.sections.forEach(section => {
|
this.selectedDmpBlueprintDefinition.sections.forEach(section => {
|
||||||
if (profiles !== undefined) {
|
if (profiles != null) {
|
||||||
profiles.filter(profile => profile.data.dmpSectionIndex.includes(section.ordinal - 1)).forEach(profile => this.sectionTemplates[section.ordinal - 1].push({ id: profile.descriptionTemplateId, label: profile.label, description: "" }));
|
profiles.filter(profile => profile.data.dmpSectionIndex.includes(section.ordinal - 1)).forEach(profile => this.sectionTemplates[section.ordinal - 1].push({ id: profile.descriptionTemplateId, label: profile.label, description: "" }));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1088,32 +1090,23 @@ export class DmpEditorBlueprintComponent extends CheckDeactivateBaseComponent im
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
onRemoveTemplate(event, sectionIndex: number) {
|
canRemoveItem(item): boolean {
|
||||||
let found = false;
|
let found = false;
|
||||||
let profiles = this.formGroup.get('profiles').value as DmpDatasetProfile[];
|
|
||||||
this.formGroup.get('datasets')['controls'].forEach(element => {
|
this.formGroup.get('datasets')['controls'].forEach(element => {
|
||||||
if ((element.get('profile').value.id === event.id) && (element.get('dmpSectionIndex').value === sectionIndex)) {
|
if ((element.get('profile').value.id === item.id) && (element.get('dmpSectionIndex').value === (this.step - 1))) {
|
||||||
found = true;
|
found = true;
|
||||||
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-REMOVE-TEMPLATE'), SnackBarNotificationLevel.Success);
|
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-REMOVE-TEMPLATE'), SnackBarNotificationLevel.Success);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (found) {
|
if (found) return false
|
||||||
this.formGroup.get('profiles').setValue(profiles);
|
else return true;
|
||||||
this.profilesAutoCompleteConfiguration = {
|
}
|
||||||
filterFn: this.filterProfiles.bind(this),
|
|
||||||
initialItems: (excludedItems: any[]) => this.filterProfiles('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))),
|
|
||||||
displayFn: (item) => item['label'],
|
|
||||||
titleFn: (item) => item['label'],
|
|
||||||
subtitleFn: (item) => item['description'],
|
|
||||||
popupItemActionIcon: 'visibility'
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
onRemoveTemplate(event, sectionIndex: number) {
|
||||||
else {
|
let profiles = this.formGroup.get('profiles').value as DmpDatasetProfile[];
|
||||||
this.sectionTemplates[sectionIndex] = this.sectionTemplates[sectionIndex].filter(sectionProfile => sectionProfile.id !== event.id);
|
this.sectionTemplates[sectionIndex] = this.sectionTemplates[sectionIndex].filter(sectionProfile => sectionProfile.id !== event.id);
|
||||||
profiles = profiles.filter(sectionProfile => sectionProfile.descriptionTemplateId !== event.id);
|
profiles = profiles.filter(sectionProfile => sectionProfile.descriptionTemplateId !== event.id || !sectionProfile.data.dmpSectionIndex.includes(sectionIndex));
|
||||||
this.formGroup.get('profiles').setValue(profiles);
|
this.formGroup.get('profiles').setValue(profiles);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addProfile(event, sectionIndex: number) {
|
addProfile(event, sectionIndex: number) {
|
||||||
|
@ -1149,7 +1142,7 @@ export class DmpEditorBlueprintComponent extends CheckDeactivateBaseComponent im
|
||||||
if (result) {
|
if (result) {
|
||||||
this.addProfile(event, sectionIndex);
|
this.addProfile(event, sectionIndex);
|
||||||
const items = this.sectionTemplates[sectionIndex];
|
const items = this.sectionTemplates[sectionIndex];
|
||||||
items.push({id: event.id, label: event.label, description: ""});
|
items.push({ id: event.id, label: event.label, description: "" });
|
||||||
this.sectionTemplates[sectionIndex] = [...items];
|
this.sectionTemplates[sectionIndex] = [...items];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<div class="funder-form" *ngIf="type == 1">
|
<div class="funder-form" *ngIf="type == 1">
|
||||||
<div *ngIf="!isCreateNewFunder">
|
<div *ngIf="!isCreateNewFunder">
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<app-single-auto-complete [required]="isRequired" [formControl]="funderFormGroup.get('existFunder')" placeholder="{{'DMP-EDITOR.FIELDS.FUNDER' | translate}}" [configuration]="funderAutoCompleteConfiguration">
|
<app-single-auto-complete [required]="isRequired" [formControl]="funderFormGroup.get('existFunder')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.FUNDER' | translate)}}" [configuration]="funderAutoCompleteConfiguration">
|
||||||
</app-single-auto-complete>
|
</app-single-auto-complete>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
<div class="grant-form" *ngIf="type == 2">
|
<div class="grant-form" *ngIf="type == 2">
|
||||||
<div *ngIf="!isCreateNew">
|
<div *ngIf="!isCreateNew">
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<app-single-auto-complete [required]="isRequired" [formControl]="grantformGroup.get('existGrant')" placeholder="{{'DMP-EDITOR.FIELDS.GRANT' | translate}}" [configuration]="grantAutoCompleteConfiguration">
|
<app-single-auto-complete [required]="isRequired" [formControl]="grantformGroup.get('existGrant')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.GRANT' | translate)}}" [configuration]="grantAutoCompleteConfiguration">
|
||||||
</app-single-auto-complete>
|
</app-single-auto-complete>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
<div class="project-form" *ngIf="type == 3">
|
<div class="project-form" *ngIf="type == 3">
|
||||||
<div *ngIf="!isCreateNewProject">
|
<div *ngIf="!isCreateNewProject">
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<app-single-auto-complete [formControl]="projectFormGroup.get('existProject')" placeholder="{{'DMP-EDITOR.FIELDS.PROJECT' | translate}}" [configuration]="projectAutoCompleteConfiguration" [required]="isRequired">
|
<app-single-auto-complete [formControl]="projectFormGroup.get('existProject')" placeholder="{{field?.placeholder?.length > 0 ? field.placeholder : ('DMP-EDITOR.FIELDS.PROJECT' | translate)}}" [configuration]="projectAutoCompleteConfiguration" [required]="isRequired">
|
||||||
</app-single-auto-complete>
|
</app-single-auto-complete>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -14,6 +14,7 @@ import { FunderCriteria } from '@app/core/query/funder/funder-criteria';
|
||||||
import { debounceTime, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
|
import { debounceTime, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { isNullOrUndefined } from '@swimlane/ngx-datatable';
|
import { isNullOrUndefined } from '@swimlane/ngx-datatable';
|
||||||
|
import { FieldInSection } from '@app/core/model/dmp/dmp-blueprint/dmp-blueprint';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'funding-info',
|
selector: 'funding-info',
|
||||||
templateUrl: './funding-info.component.html',
|
templateUrl: './funding-info.component.html',
|
||||||
|
@ -30,6 +31,7 @@ export class FundingInfoComponent extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
@Input() isRequired: boolean;
|
@Input() isRequired: boolean;
|
||||||
@Input() type: number;
|
@Input() type: number;
|
||||||
|
@Input() field: FieldInSection;
|
||||||
|
|
||||||
@Input() formGroup: FormGroup;
|
@Input() formGroup: FormGroup;
|
||||||
@Input() grantformGroup: FormGroup;
|
@Input() grantformGroup: FormGroup;
|
||||||
|
|
|
@ -332,7 +332,7 @@
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
|
:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
|
||||||
padding: 0rem 0rem 0.4rem 0rem !important;
|
padding: 0rem 0rem 0.4rem 0rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,5 +105,10 @@
|
||||||
"allowOrganizationCreator": true,
|
"allowOrganizationCreator": true,
|
||||||
"useSplash": false,
|
"useSplash": false,
|
||||||
"orcidPath": "https://orcid.org/",
|
"orcidPath": "https://orcid.org/",
|
||||||
"maxFileSizeInMB": 10
|
"maxFileSizeInMB": 10,
|
||||||
|
"newReleaseNotification": {
|
||||||
|
"link": "https://www.openaire.eu/gazing-the-future-output-management-plans",
|
||||||
|
"versionCode": "0",
|
||||||
|
"expires": "2024-02-15T00:00"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
|
||||||
|
var sign_out_google = (function() {
|
||||||
|
var auth2 = gapi.auth2.getAuthInstance();
|
||||||
|
auth2.signOut().then(function () {
|
||||||
|
console.log('User signed out from google.');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var simple_notifier = (function(type, title, message) {
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
$(".alert").remove();
|
||||||
|
}, 11000);
|
||||||
|
|
||||||
|
return notify(type, title, message, null, null, null, null, null, null, null, null, null, null);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function notify(type, title, message, delay, icon, url, target, allow_dismiss, offset_x, offset_y, animate_enter, animate_exit, newest_on_top){
|
||||||
|
|
||||||
|
var options = {};
|
||||||
|
if(icon!=null) options.icon = icon;
|
||||||
|
if(title!=null) options.title = title;
|
||||||
|
if(message!=null) options.message = message;
|
||||||
|
if(url!=null) options.url = url;
|
||||||
|
if(target!=null) options.target = target;
|
||||||
|
|
||||||
|
var settings = {};
|
||||||
|
if(type!=null) settings.type = type;
|
||||||
|
if(allow_dismiss!=null) settings.allow_dismiss = allow_dismiss;
|
||||||
|
settings.delay = 5;
|
||||||
|
if(delay!=null) settings.delay = delay;
|
||||||
|
|
||||||
|
return $.notify(options,settings, delay);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -306,7 +306,7 @@
|
||||||
"DATASET-TEMPLATE-NAME": "Description template name",
|
"DATASET-TEMPLATE-NAME": "Description template name",
|
||||||
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Dataset is about, it's scope and objectives.",
|
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Description is about, it's scope and objectives.",
|
||||||
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
||||||
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
||||||
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
||||||
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
||||||
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Dataset template description",
|
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Template description",
|
||||||
"UNTITLED": "Untitled",
|
"UNTITLED": "Untitled",
|
||||||
"QUESTION": "Question",
|
"QUESTION": "Question",
|
||||||
"TEMPLATE-OUTLINE": "Template outline",
|
"TEMPLATE-OUTLINE": "Template outline",
|
||||||
|
@ -871,10 +871,10 @@
|
||||||
"DESCRIPTION": "Description",
|
"DESCRIPTION": "Description",
|
||||||
"SELECT-DESCRIPTIONS-TO-CLONE": "Select which descriptions to include in the new DMP. Selected descriptions will be editable.",
|
"SELECT-DESCRIPTIONS-TO-CLONE": "Select which descriptions to include in the new DMP. Selected descriptions will be editable.",
|
||||||
"SELECT-DESCRIPTIONS-NONE": "Not available Descriptions for this DMP.",
|
"SELECT-DESCRIPTIONS-NONE": "Not available Descriptions for this DMP.",
|
||||||
"TEXT-INFO": "Datasets are documented following pre-defined templates which set the content of dataset descriptions. In {{ APP_NAME }}, a DMP can contain as many dataset descriptions as the datasets it documents. Browse ",
|
"TEXT-INFO": "Descriptions are documented following pre-defined templates which set the content of the descriptions. In {{ APP_NAME }}, a DMP can contain as many descriptions as the entities it documents. Browse ",
|
||||||
"TEXT-INFO-REST": " for a look at datasets described in {{ APP_NAME }} DMPs",
|
"TEXT-INFO-REST": " for a look at entities described in {{ APP_NAME }} DMPs",
|
||||||
"LINK-PUBLIC-DATASETS": "Public Datasets",
|
"LINK-PUBLIC-DATASETS": "Public Descriptions",
|
||||||
"TEXT-INFO-PAR": "New datasets can be added to existing DMPs at any time and be described with more than one template. Datasets can also be cloned and re-used in other DMPs as well as be deleted without negatively affecting the DMP as a whole.",
|
"TEXT-INFO-PAR": "New descriptions can be added to existing DMPs at any time and be described with more than one template. Descriptions can also be cloned and re-used in other DMPs as well as be deleted without negatively affecting the DMP as a whole.",
|
||||||
"COLUMNS": {
|
"COLUMNS": {
|
||||||
"NAME": "Name",
|
"NAME": "Name",
|
||||||
"REFERNCE": "Referenz",
|
"REFERNCE": "Referenz",
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
"UNSUCCESSFUL-LOGOUT": "Unsuccessful Logout",
|
"UNSUCCESSFUL-LOGOUT": "Unsuccessful Logout",
|
||||||
"UNSUCCESSFUL-LOGIN": "Unsuccessful Login",
|
"UNSUCCESSFUL-LOGIN": "Unsuccessful Login",
|
||||||
"SUCCESSFUL-DATASET-PROFILE-DELETE": "Successful Delete",
|
"SUCCESSFUL-DATASET-PROFILE-DELETE": "Successful Delete",
|
||||||
"UNSUCCESSFUL-DATASET-PROFILE-DELETE": "This template can not deleted, because Datasets are associated with it",
|
"UNSUCCESSFUL-DATASET-PROFILE-DELETE": "This template can not deleted, because Descriptions are associated with it",
|
||||||
"SUCCESSFUL-DMP-BLUEPRINT-DELETE": "Successful Delete",
|
"SUCCESSFUL-DMP-BLUEPRINT-DELETE": "Successful Delete",
|
||||||
"UNSUCCESSFUL-DMP-BLUEPRINT-DELETE": "This blueprint can not deleted, because DMPs are associated with it",
|
"UNSUCCESSFUL-DMP-BLUEPRINT-DELETE": "This blueprint can not deleted, because DMPs are associated with it",
|
||||||
"SUCCESSFUL-DESCRIPTION-TEMPLATE-TYPE-DELETE": "Successful Delete",
|
"SUCCESSFUL-DESCRIPTION-TEMPLATE-TYPE-DELETE": "Successful Delete",
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
},
|
},
|
||||||
"DMP-TO-DATASET-DIALOG": {
|
"DMP-TO-DATASET-DIALOG": {
|
||||||
"FROM-DMP": "You have successfully created your",
|
"FROM-DMP": "You have successfully created your",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"TO-DATASET": "You will be transferred to the",
|
"TO-DATASET": "You will be transferred to the",
|
||||||
"DATASET": "Dataset",
|
"DATASET": "Dataset",
|
||||||
"EDITOR": "editor",
|
"EDITOR": "editor",
|
||||||
|
@ -132,8 +132,8 @@
|
||||||
"OPENSOURCE-LICENCES": "Opensource Licenses",
|
"OPENSOURCE-LICENCES": "Opensource Licenses",
|
||||||
"TERMS": "Terms Of Service",
|
"TERMS": "Terms Of Service",
|
||||||
"COOKIES-POLICY": "Cookies Policy",
|
"COOKIES-POLICY": "Cookies Policy",
|
||||||
"PLANS": "My DMPs",
|
"PLANS": "My Plans",
|
||||||
"EXPLORE-PLANS": "Published DMPs",
|
"EXPLORE-PLANS": "Published Plans",
|
||||||
"QUICK-WIZARD": "New DMP (Wizard)",
|
"QUICK-WIZARD": "New DMP (Wizard)",
|
||||||
"PLANS-NEW": "New DMP (Expert)",
|
"PLANS-NEW": "New DMP (Expert)",
|
||||||
"DMP-NEW": "New DMP",
|
"DMP-NEW": "New DMP",
|
||||||
|
@ -224,9 +224,9 @@
|
||||||
"TITLE": "{{ APP_NAME_CAPS }}",
|
"TITLE": "{{ APP_NAME_CAPS }}",
|
||||||
"GRANTS": "Grants",
|
"GRANTS": "Grants",
|
||||||
"GRANT": "Grant",
|
"GRANT": "Grant",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"DMPS": "DMPs",
|
"DMPS": "Plans",
|
||||||
"MY-DMPS": "MY DMPs",
|
"MY-DMPS": "MY Plans",
|
||||||
"DATASETS": "Datasets",
|
"DATASETS": "Datasets",
|
||||||
"DESCRIPTION": "Description",
|
"DESCRIPTION": "Description",
|
||||||
"PUBLIC-DATASETS": "Explore {{ APP_NAME_CAPS }}",
|
"PUBLIC-DATASETS": "Explore {{ APP_NAME_CAPS }}",
|
||||||
|
@ -244,13 +244,13 @@
|
||||||
"TEMPLATE": "TEMPLATE",
|
"TEMPLATE": "TEMPLATE",
|
||||||
"DMP-BLUEPRINTS-CAPS": "DMP BLUEPRINTS",
|
"DMP-BLUEPRINTS-CAPS": "DMP BLUEPRINTS",
|
||||||
"USERS-BREADCRUMB": "USERS",
|
"USERS-BREADCRUMB": "USERS",
|
||||||
"START-NEW-DMP": "Start new DMP",
|
"START-NEW-DMP": "Start new Plan",
|
||||||
"START-NEW-DMP-TXT": "Start fresh or continue work in {{ APP_NAME }}! Create a new DMP or upload an existing DMP to {{ APP_NAME }}",
|
"START-NEW-DMP-TXT": "Start fresh or continue work in {{ APP_NAME }}! Create a new DMP or upload an existing DMP to {{ APP_NAME }}",
|
||||||
"START-WIZARD": "Start wizard",
|
"START-WIZARD": "Start wizard",
|
||||||
"IMPORT-FROM-FILE": "Import from file",
|
"IMPORT-FROM-FILE": "Import from file",
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"DATASET": "Dataset",
|
"DATASET": "Dataset",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"GRANT": "Grant",
|
"GRANT": "Grant",
|
||||||
"PUBLISHED": "Published"
|
"PUBLISHED": "Published"
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,7 @@
|
||||||
"ABOUT": "About",
|
"ABOUT": "About",
|
||||||
"DASHBOARD": "Home",
|
"DASHBOARD": "Home",
|
||||||
"DMP": "DATA MANAGEMENT PLANS",
|
"DMP": "DATA MANAGEMENT PLANS",
|
||||||
"MY-DMPS": "My DMPs",
|
"MY-DMPS": "My Plans",
|
||||||
"DATASETS": "DATASETS",
|
"DATASETS": "DATASETS",
|
||||||
"GRANTS": "GRANTS",
|
"GRANTS": "GRANTS",
|
||||||
"NEW DATASET": "New Dataset",
|
"NEW DATASET": "New Dataset",
|
||||||
|
@ -274,7 +274,7 @@
|
||||||
"HISTORY-VISITED": "LAST VISITED",
|
"HISTORY-VISITED": "LAST VISITED",
|
||||||
"HISTORY-EDITED": "LAST EDITED",
|
"HISTORY-EDITED": "LAST EDITED",
|
||||||
"PUBLIC": "PUBLISHED",
|
"PUBLIC": "PUBLISHED",
|
||||||
"PUBLIC-DMPS": "Public DMPs",
|
"PUBLIC-DMPS": "Public Plans",
|
||||||
"PUBLIC-DESC": "Public Descriptions",
|
"PUBLIC-DESC": "Public Descriptions",
|
||||||
"ACCOUNT": "ACCOUNT",
|
"ACCOUNT": "ACCOUNT",
|
||||||
"ADMIN": "ADMIN",
|
"ADMIN": "ADMIN",
|
||||||
|
@ -306,7 +306,7 @@
|
||||||
"DATASET-TEMPLATE-NAME": "Description template name",
|
"DATASET-TEMPLATE-NAME": "Description template name",
|
||||||
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Dataset is about, it's scope and objectives.",
|
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Description is about, it's scope and objectives.",
|
||||||
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
||||||
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
||||||
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
||||||
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
||||||
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Dataset template description",
|
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Template description",
|
||||||
"UNTITLED": "Untitled",
|
"UNTITLED": "Untitled",
|
||||||
"QUESTION": "Question",
|
"QUESTION": "Question",
|
||||||
"TEMPLATE-OUTLINE": "Template outline",
|
"TEMPLATE-OUTLINE": "Template outline",
|
||||||
|
@ -623,7 +623,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DMP-LISTING": {
|
"DMP-LISTING": {
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"GRANT": "Grant",
|
"GRANT": "Grant",
|
||||||
"TITLE": "Data Management Plans",
|
"TITLE": "Data Management Plans",
|
||||||
"OWNER": "Owner",
|
"OWNER": "Owner",
|
||||||
|
@ -634,8 +634,8 @@
|
||||||
"PUBLISHED": "Published",
|
"PUBLISHED": "Published",
|
||||||
"VERSION": "Version",
|
"VERSION": "Version",
|
||||||
"CONTAINED-DESCRIPTIONS": "Contained Descriptions",
|
"CONTAINED-DESCRIPTIONS": "Contained Descriptions",
|
||||||
"TEXT-INFO": "Information in a DMP show how datasets have been collected and/or generated, how they have been processed and analyzed, i.e. using which tools, standards, methodologies etc, but also where and how datasets are backed up, published and preserved, including any costs associated with personnel dedicated for data curation/ stewardship activities or costs for acquiring or building data management services.",
|
"TEXT-INFO": "Information in a DMP show how descriptions have been collected and/or generated, how they have been processed and analyzed, i.e. using which tools, standards, methodologies etc, but also where and how descriptions are backed up, published and preserved, including any costs associated with personnel dedicated for data curation/ stewardship activities or costs for acquiring or building data management services.",
|
||||||
"TEXT-INFO-QUESTION": "Not sure how a DMP looks in practice? Browse Public DMPs and",
|
"TEXT-INFO-QUESTION": "Not sure how a Plan looks in practice? Browse Public Plans and",
|
||||||
"LINK-ZENODO": "LIBER community in Zenodo",
|
"LINK-ZENODO": "LIBER community in Zenodo",
|
||||||
"GET-IDEA": "to get an idea!",
|
"GET-IDEA": "to get an idea!",
|
||||||
"SORT-BY": "Sort by",
|
"SORT-BY": "Sort by",
|
||||||
|
@ -867,14 +867,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DATASET-LISTING": {
|
"DATASET-LISTING": {
|
||||||
"TITLE": "Datasets",
|
"TITLE": "Datensatzbeschreibungen",
|
||||||
"DESCRIPTION": "Description",
|
"DESCRIPTION": "Description",
|
||||||
"SELECT-DESCRIPTIONS-TO-CLONE": "Select which descriptions to include in the new DMP. Selected descriptions will be editable.",
|
"SELECT-DESCRIPTIONS-TO-CLONE": "Select which descriptions to include in the new DMP. Selected descriptions will be editable.",
|
||||||
"SELECT-DESCRIPTIONS-NONE": "Not available Descriptions for this DMP.",
|
"SELECT-DESCRIPTIONS-NONE": "Not available Descriptions for this DMP.",
|
||||||
"TEXT-INFO": "Datasets are documented following pre-defined templates which set the content of dataset descriptions. In {{ APP_NAME }}, a DMP can contain as many dataset descriptions as the datasets it documents. Browse ",
|
"TEXT-INFO": "Descriptions are documented following pre-defined templates which set the content of the descriptions. In {{ APP_NAME }}, a DMP can contain as many descriptions as the entities it documents. Browse ",
|
||||||
"TEXT-INFO-REST": " for a look at datasets described in {{ APP_NAME }} DMPs",
|
"TEXT-INFO-REST": " for a look at entities described in {{ APP_NAME }} DMPs",
|
||||||
"LINK-PUBLIC-DATASETS": "Public Datasets",
|
"LINK-PUBLIC-DATASETS": "Public Descriptions",
|
||||||
"TEXT-INFO-PAR": "New datasets can be added to existing DMPs at any time and be described with more than one template. Datasets can also be cloned and re-used in other DMPs as well as be deleted without negatively affecting the DMP as a whole.",
|
"TEXT-INFO-PAR": "New descriptions can be added to existing DMPs at any time and be described with more than one template. Descriptions can also be cloned and re-used in other DMPs as well as be deleted without negatively affecting the DMP as a whole.",
|
||||||
"COLUMNS": {
|
"COLUMNS": {
|
||||||
"NAME": "Name",
|
"NAME": "Name",
|
||||||
"REFERNCE": "Reference",
|
"REFERNCE": "Reference",
|
||||||
|
@ -887,7 +887,7 @@
|
||||||
"FINALIZED": "Finalized",
|
"FINALIZED": "Finalized",
|
||||||
"LAST-EDITED": "Last Edited",
|
"LAST-EDITED": "Last Edited",
|
||||||
"ACTIONS": "Actions",
|
"ACTIONS": "Actions",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"PROFILE": "Template",
|
"PROFILE": "Template",
|
||||||
"DATAREPOSITORIES": "Data Repositories",
|
"DATAREPOSITORIES": "Data Repositories",
|
||||||
"REGISTRIES": "Registries",
|
"REGISTRIES": "Registries",
|
||||||
|
@ -914,7 +914,7 @@
|
||||||
"DRAFT": "Private access - Editable Dataset",
|
"DRAFT": "Private access - Editable Dataset",
|
||||||
"FINALIZED": "Private access - Closed Dataset"
|
"FINALIZED": "Private access - Closed Dataset"
|
||||||
},
|
},
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"GRANT": "Grant",
|
"GRANT": "Grant",
|
||||||
"TEMPLATES-INVOLVED": "Description Template",
|
"TEMPLATES-INVOLVED": "Description Template",
|
||||||
"VERSION": "DMP Version",
|
"VERSION": "DMP Version",
|
||||||
|
@ -928,7 +928,7 @@
|
||||||
"TITLE": "Published Datasets",
|
"TITLE": "Published Datasets",
|
||||||
"TOOLTIP": {
|
"TOOLTIP": {
|
||||||
"FINALIZED": "Private access - Closed Dataset",
|
"FINALIZED": "Private access - Closed Dataset",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"GRANT": "Grant",
|
"GRANT": "Grant",
|
||||||
"TEMPLATES-INVOLVED": "Description Template"
|
"TEMPLATES-INVOLVED": "Description Template"
|
||||||
},
|
},
|
||||||
|
@ -950,7 +950,7 @@
|
||||||
"DESCRIPTION": "Description",
|
"DESCRIPTION": "Description",
|
||||||
"CREATED": "Created",
|
"CREATED": "Created",
|
||||||
"ACTIONS": "Actions",
|
"ACTIONS": "Actions",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"PROFILE": "Template",
|
"PROFILE": "Template",
|
||||||
"DATAREPOSITORIES": "Data Repositories",
|
"DATAREPOSITORIES": "Data Repositories",
|
||||||
"REGISTRIES": "Registries",
|
"REGISTRIES": "Registries",
|
||||||
|
@ -1071,7 +1071,7 @@
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"NEW": "New Data Management Plan",
|
"NEW": "New Data Management Plan",
|
||||||
"EDIT": "Edit",
|
"EDIT": "Edit",
|
||||||
"EDIT-DMP": "Editing DMP",
|
"EDIT-DMP": "Editing Plan",
|
||||||
"ADD-DATASET": "Adding description",
|
"ADD-DATASET": "Adding description",
|
||||||
"EDIT-DESCRIPTION": "Editing Description",
|
"EDIT-DESCRIPTION": "Editing Description",
|
||||||
"CLONE-DMP": "Clone",
|
"CLONE-DMP": "Clone",
|
||||||
|
@ -1159,12 +1159,12 @@
|
||||||
"DATASET-SELECTION": "Dataset selection",
|
"DATASET-SELECTION": "Dataset selection",
|
||||||
"DESCRIPTION-INFO": "Description info",
|
"DESCRIPTION-INFO": "Description info",
|
||||||
"LICENSE-INFO": "License",
|
"LICENSE-INFO": "License",
|
||||||
"DATASET": "Dataset",
|
"DATASET": "Description",
|
||||||
"PREVIOUS": "Previous",
|
"PREVIOUS": "Previous",
|
||||||
"NEXT": "Next"
|
"NEXT": "Next"
|
||||||
},
|
},
|
||||||
"MAIN-INFO": {
|
"MAIN-INFO": {
|
||||||
"INTRO": "A DMP in {{ APP_NAME }} consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research datasets that highlight the steps followed and the means used across data management activities.",
|
"INTRO": "A Plan in {{ APP_NAME }} consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research datasets that highlight the steps followed and the means used across data management activities.",
|
||||||
"HINT": "A brief description of what the DMP is about, it’s scope and objectives.",
|
"HINT": "A brief description of what the DMP is about, it’s scope and objectives.",
|
||||||
"TYPING": "Type more letters of the name so its more possible to find the correct one.",
|
"TYPING": "Type more letters of the name so its more possible to find the correct one.",
|
||||||
"UNIQUE-IDENTIFIER": "Unique Identifier",
|
"UNIQUE-IDENTIFIER": "Unique Identifier",
|
||||||
|
@ -1184,8 +1184,8 @@
|
||||||
"IDENTIFIER-PROJECT-EXISTS": "A project with the given identifier exists."
|
"IDENTIFIER-PROJECT-EXISTS": "A project with the given identifier exists."
|
||||||
},
|
},
|
||||||
"DATASET-INFO": {
|
"DATASET-INFO": {
|
||||||
"INTRO": "A DMP in {{ APP_NAME }} consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research datasets that highlight the steps followed and the means used across data management activities.",
|
"INTRO": "A Plan in {{ APP_NAME }} consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research datasets that highlight the steps followed and the means used across data management activities.",
|
||||||
"SECOND-INTRO": "Datasets are documented following pre-defined templates which set the content of dataset descriptions. In {{ APP_NAME }}, a DMP can contain as many dataset descriptions as the datasets it documents.",
|
"SECOND-INTRO": "Descriptions are documented following pre-defined templates which set the content of dataset descriptions. In {{ APP_NAME }}, a DMP can contain as many dataset descriptions as the datasets it documents.",
|
||||||
"FIND": "Couldn't find a suitable one?",
|
"FIND": "Couldn't find a suitable one?",
|
||||||
"HINT": "Select a template to describe your descriptions. You may select more than one template."
|
"HINT": "Select a template to describe your descriptions. You may select more than one template."
|
||||||
},
|
},
|
||||||
|
@ -1322,7 +1322,7 @@
|
||||||
"DESCRIPTION": "Description",
|
"DESCRIPTION": "Description",
|
||||||
"PROFILE": "Template",
|
"PROFILE": "Template",
|
||||||
"URI": "Uri",
|
"URI": "Uri",
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"SELECT-DMP": "Select DMP",
|
"SELECT-DMP": "Select DMP",
|
||||||
"DATAREPOSITORIES": "Data Repositories",
|
"DATAREPOSITORIES": "Data Repositories",
|
||||||
"REGISTRIES": "Registries",
|
"REGISTRIES": "Registries",
|
||||||
|
@ -1386,7 +1386,7 @@
|
||||||
"SAVE": "Save"
|
"SAVE": "Save"
|
||||||
},
|
},
|
||||||
"FIRST-STEP": {
|
"FIRST-STEP": {
|
||||||
"TITLE": "DMP",
|
"TITLE": "Plan",
|
||||||
"PLACEHOLDER": "Pick an existing DMP"
|
"PLACEHOLDER": "Pick an existing DMP"
|
||||||
},
|
},
|
||||||
"PREFILL-STEP": {
|
"PREFILL-STEP": {
|
||||||
|
@ -1522,7 +1522,7 @@
|
||||||
},
|
},
|
||||||
"DATASET-PROFILE-INTERNAL-DMP-ENTITIES-TYPE": {
|
"DATASET-PROFILE-INTERNAL-DMP-ENTITIES-TYPE": {
|
||||||
"RESEARCHERS": "Researchers",
|
"RESEARCHERS": "Researchers",
|
||||||
"DMPS": "DMPs",
|
"DMPS": "Plans",
|
||||||
"DATASETS": "Datasets",
|
"DATASETS": "Datasets",
|
||||||
"EXTERNAL-SOURCE-HINT": "List of values provided by external source(s)"
|
"EXTERNAL-SOURCE-HINT": "List of values provided by external source(s)"
|
||||||
},
|
},
|
||||||
|
@ -1573,7 +1573,7 @@
|
||||||
},
|
},
|
||||||
"DMP-WIZARD": {
|
"DMP-WIZARD": {
|
||||||
"FIRST-STEP": {
|
"FIRST-STEP": {
|
||||||
"DMP": "DMP Editor",
|
"DMP": "Plan Editor",
|
||||||
"DATASETS": "Datasets"
|
"DATASETS": "Datasets"
|
||||||
},
|
},
|
||||||
"ACTIONS": {
|
"ACTIONS": {
|
||||||
|
@ -1693,9 +1693,9 @@
|
||||||
"DASHBOARD": {
|
"DASHBOARD": {
|
||||||
"MY-GRANTS": "My Grants",
|
"MY-GRANTS": "My Grants",
|
||||||
"GRANTS": "Grants",
|
"GRANTS": "Grants",
|
||||||
"MY-DMPS": "My DMPs",
|
"MY-DMPS": "My Plans",
|
||||||
"TITLE": "What is {{ APP_NAME_CAPS }}?",
|
"TITLE": "What is {{ APP_NAME_CAPS }}?",
|
||||||
"DMP-QUESTION": "What is a DMP in {{ APP_NAME_CAPS }}?",
|
"DMP-QUESTION": "What is a Plan in {{ APP_NAME_CAPS }}?",
|
||||||
"INFO-TEXT": "{{ APP_NAME_CAPS }} is an open extensible service that simplifies the management, validation, monitoring and maintenance and of Data Management Plans. It allows actors (researchers, managers, supervisors etc) to create actionable DMPs that may be freely exchanged among infrastructures for carrying out specific aspects of the Data management process in accordance with the intentions and commitment of Data owners.",
|
"INFO-TEXT": "{{ APP_NAME_CAPS }} is an open extensible service that simplifies the management, validation, monitoring and maintenance and of Data Management Plans. It allows actors (researchers, managers, supervisors etc) to create actionable DMPs that may be freely exchanged among infrastructures for carrying out specific aspects of the Data management process in accordance with the intentions and commitment of Data owners.",
|
||||||
"INFO-DMP-TEXT": "A Data Management Plan (DMP) is a living document describing the datasets that are generated and/ or re-used during and after a research lifetime. DMPs aim to provide researchers with essential information to re-produce, re-distribute and re-purpose research results thus assuring for their validity and exploitation.",
|
"INFO-DMP-TEXT": "A Data Management Plan (DMP) is a living document describing the datasets that are generated and/ or re-used during and after a research lifetime. DMPs aim to provide researchers with essential information to re-produce, re-distribute and re-purpose research results thus assuring for their validity and exploitation.",
|
||||||
"NEW-QUESTION": "New with DMPs? Visit",
|
"NEW-QUESTION": "New with DMPs? Visit",
|
||||||
|
@ -1703,7 +1703,7 @@
|
||||||
"OPEN-AIR-GUIDE": "OpenAIRE’s Guide for Researchers",
|
"OPEN-AIR-GUIDE": "OpenAIRE’s Guide for Researchers",
|
||||||
"LEARN-MORE": "to learn more about how to create one!",
|
"LEARN-MORE": "to learn more about how to create one!",
|
||||||
"ORGANIZATIONS": "Related Organizations",
|
"ORGANIZATIONS": "Related Organizations",
|
||||||
"DMPS": "DMPs",
|
"DMPS": "Plans",
|
||||||
"MY-DATASETS": "My Datasets",
|
"MY-DATASETS": "My Datasets",
|
||||||
"DATASETS": "Datasets",
|
"DATASETS": "Datasets",
|
||||||
"SEARCH": "SEARCH...",
|
"SEARCH": "SEARCH...",
|
||||||
|
@ -1711,15 +1711,15 @@
|
||||||
"PERSONAL-USAGE": "Personal Usage",
|
"PERSONAL-USAGE": "Personal Usage",
|
||||||
"PUBLIC-USAGE": "Public Usage",
|
"PUBLIC-USAGE": "Public Usage",
|
||||||
"DESCRIPTIONS": "Descriptions",
|
"DESCRIPTIONS": "Descriptions",
|
||||||
"DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Datasets",
|
"DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Descriptions",
|
||||||
"PUBLIC-DMPS": "Public DMPs",
|
"PUBLIC-DMPS": "Public Plans",
|
||||||
"PUBLIC-DATASETS": "Public Datasets",
|
"PUBLIC-DATASETS": "Public Datasets",
|
||||||
"RELATED-ORGANISATIONS": "Related Organizations",
|
"RELATED-ORGANISATIONS": "Related Organizations",
|
||||||
"DRAFTS": "Drafts",
|
"DRAFTS": "Drafts",
|
||||||
"ALL": "All",
|
"ALL": "All",
|
||||||
"EMPTY-LIST": "Nothing here yet.",
|
"EMPTY-LIST": "Nothing here yet.",
|
||||||
"LATEST-ACTIVITY": "Latest Activity",
|
"LATEST-ACTIVITY": "Latest Activity",
|
||||||
"DMP-ABOUT-BEG": "A DMP in {{ APP_NAME }} consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research datasets, namely",
|
"DMP-ABOUT-BEG": "A Plan in {{ APP_NAME }} consists of key information about research, such as purpose, objectives and researchers involved, but also about documentation of research entities, namely",
|
||||||
"DMP-ABOUT-END": ", that highlight the steps followed and the means used across data management activities.",
|
"DMP-ABOUT-END": ", that highlight the steps followed and the means used across data management activities.",
|
||||||
"SELECT-DMP": "Select a DMP for your Dataset",
|
"SELECT-DMP": "Select a DMP for your Dataset",
|
||||||
"ACTIONS": {
|
"ACTIONS": {
|
||||||
|
@ -1728,7 +1728,7 @@
|
||||||
},
|
},
|
||||||
"TOUR-GUIDE": {
|
"TOUR-GUIDE": {
|
||||||
"DMP": "This is your dashboard. You can view and edit all DMPs that you have either contributed to or created yourself.",
|
"DMP": "This is your dashboard. You can view and edit all DMPs that you have either contributed to or created yourself.",
|
||||||
"START-NEW": "Create your DMP with Start new DMP.",
|
"START-NEW": "Create your Plan with Start new Plan.",
|
||||||
"IMPORT-DMP": "You can import a DMP",
|
"IMPORT-DMP": "You can import a DMP",
|
||||||
"START-WIZARD": "or create new in {{ APP_NAME }}.",
|
"START-WIZARD": "or create new in {{ APP_NAME }}.",
|
||||||
"DATASET": "This is your dashboard. You can view and edit all Datasets that you have either contributed to or created yourself.",
|
"DATASET": "This is your dashboard. You can view and edit all Datasets that you have either contributed to or created yourself.",
|
||||||
|
@ -1738,7 +1738,7 @@
|
||||||
},
|
},
|
||||||
"ADD-NEW-DATASET": {
|
"ADD-NEW-DATASET": {
|
||||||
"OPTIONS-NOT-ENOUGH": "Are those options not enough?",
|
"OPTIONS-NOT-ENOUGH": "Are those options not enough?",
|
||||||
"START-NEW-DMP": "Start new DMP"
|
"START-NEW-DMP": "Start new Plan"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"USER-DIALOG": {
|
"USER-DIALOG": {
|
||||||
|
@ -1869,7 +1869,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DMP-FINALISE-DIALOG": {
|
"DMP-FINALISE-DIALOG": {
|
||||||
"DMP": "DMP",
|
"DMP": "Plan",
|
||||||
"DATASETS": "Datasets",
|
"DATASETS": "Datasets",
|
||||||
"EMPTY": "No Datasets for this DMP so far",
|
"EMPTY": "No Datasets for this DMP so far",
|
||||||
"SUBMIT": "Submit",
|
"SUBMIT": "Submit",
|
||||||
|
@ -1983,5 +1983,13 @@
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "Draft",
|
||||||
"FINALIZED": "Finalized",
|
"FINALIZED": "Finalized",
|
||||||
"DELETED": "Deleted"
|
"DELETED": "Deleted"
|
||||||
|
},
|
||||||
|
"NEW-RELEASE-NOTIFICATION": {
|
||||||
|
"TITLE": "New ARGOS Release!",
|
||||||
|
"HINT": "Discover the all-new Argos version",
|
||||||
|
"BODY": "Discover the latest enhancements and improvements with our brand-new Argos release! Use the Default Blueprint to create plans that include funders information. Contact us to create Blueprints for institutional plans that connect to local services or for training activities. Adopt the output management plan as an overarching plan that combines different templates, e.g. data and software. Don’t miss out – explore now!",
|
||||||
|
"ACTIONS": {
|
||||||
|
"LEARN-MORE": "Learn more"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,7 +306,7 @@
|
||||||
"DATASET-TEMPLATE-NAME": "Description template name",
|
"DATASET-TEMPLATE-NAME": "Description template name",
|
||||||
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Dataset is about, it's scope and objectives.",
|
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Description is about, it's scope and objectives.",
|
||||||
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
||||||
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
||||||
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
||||||
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
||||||
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Dataset template description",
|
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Template description",
|
||||||
"UNTITLED": "Untitled",
|
"UNTITLED": "Untitled",
|
||||||
"QUESTION": "Question",
|
"QUESTION": "Question",
|
||||||
"TEMPLATE-OUTLINE": "Template outline",
|
"TEMPLATE-OUTLINE": "Template outline",
|
||||||
|
|
|
@ -306,7 +306,7 @@
|
||||||
"DATASET-TEMPLATE-NAME": "Description template name",
|
"DATASET-TEMPLATE-NAME": "Description template name",
|
||||||
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Dataset is about, it's scope and objectives.",
|
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Description is about, it's scope and objectives.",
|
||||||
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
||||||
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
||||||
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
||||||
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
||||||
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Dataset template description",
|
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Template description",
|
||||||
"UNTITLED": "Untitled",
|
"UNTITLED": "Untitled",
|
||||||
"QUESTION": "Question",
|
"QUESTION": "Question",
|
||||||
"TEMPLATE-OUTLINE": "Template outline",
|
"TEMPLATE-OUTLINE": "Template outline",
|
||||||
|
|
|
@ -306,7 +306,7 @@
|
||||||
"DATASET-TEMPLATE-NAME": "Description template name",
|
"DATASET-TEMPLATE-NAME": "Description template name",
|
||||||
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Dataset is about, it's scope and objectives.",
|
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Description is about, it's scope and objectives.",
|
||||||
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
||||||
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
||||||
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
||||||
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
||||||
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Dataset template description",
|
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Template description",
|
||||||
"UNTITLED": "Untitled",
|
"UNTITLED": "Untitled",
|
||||||
"QUESTION": "Question",
|
"QUESTION": "Question",
|
||||||
"TEMPLATE-OUTLINE": "Template outline",
|
"TEMPLATE-OUTLINE": "Template outline",
|
||||||
|
|
|
@ -306,7 +306,7 @@
|
||||||
"DATASET-TEMPLATE-NAME": "Description template name",
|
"DATASET-TEMPLATE-NAME": "Description template name",
|
||||||
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
"DATASET-TEMPLATE-NAME-HINT": "A title that determines the Description template.",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
"DATASET-TEMPLATE-DESCRIPTION": "Description",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Dataset is about, it's scope and objectives.",
|
"DATASET-TEMPLATE-DESCRIPTION-HINT": "A brief description of what the Description is about, it's scope and objectives.",
|
||||||
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
"DESCRIPTION-TEMPLATE-TYPE": "Description template type",
|
||||||
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
"DESCRIPTION-TEMPLATE-SELECT-TYPE": "Select a type",
|
||||||
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
"DATASET-TEMPLATE-LANGUAGE": "Description template language",
|
||||||
|
@ -318,7 +318,7 @@
|
||||||
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
"DATASET-TEMPLATE-REMOVE-USER": "Remove Editor",
|
||||||
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
"DATASET-TEMPLATE-NO-USERS-YET": "... No editors yet",
|
||||||
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
"DATASET-TEMPLATE-VALIDATE-AND-ADD-USER": "Validate and Add Editor",
|
||||||
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Dataset template description",
|
"DATASET-TEMPLATE-DESCRIPTION-PLACEHOLDER": "Template description",
|
||||||
"UNTITLED": "Untitled",
|
"UNTITLED": "Untitled",
|
||||||
"QUESTION": "Question",
|
"QUESTION": "Question",
|
||||||
"TEMPLATE-OUTLINE": "Template outline",
|
"TEMPLATE-OUTLINE": "Template outline",
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
|
@ -1,6 +1,5 @@
|
||||||
[
|
[
|
||||||
"DatasetProfileEditorModel.description",
|
"DatasetProfileEditorModel.description",
|
||||||
"DatasetProfileEditorModel.type",
|
|
||||||
"DatasetProfileEditorModel.label",
|
"DatasetProfileEditorModel.label",
|
||||||
"SectionEditorModel.title",
|
"SectionEditorModel.title",
|
||||||
"SectionEditorModel.description",
|
"SectionEditorModel.description",
|
||||||
|
|
|
@ -90,3 +90,13 @@ h2.title{
|
||||||
.text-gray{
|
.text-gray{
|
||||||
color: $gray-color !important;
|
color: $gray-color !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin-left: 1rem;
|
||||||
|
border-left: .2em solid #dfe2e5;
|
||||||
|
padding-left: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
background-color: lightgoldenrodyellow;
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
<!doctype html>
|
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
|
|
Loading…
Reference in New Issue