Merge branch 'ui-redesign' of gitlab.eudat.eu:dmp/OpenAIRE-EUDAT-DMP-service-pilot into ui-redesign

This commit is contained in:
apapachristou 2020-07-17 17:47:48 +03:00
commit e475b265ab
57 changed files with 2409 additions and 489 deletions

View File

@ -1,224 +0,0 @@
package eu.eudat.controllers;
import eu.eudat.data.entities.Dataset;
import eu.eudat.data.query.items.item.dataset.DatasetWizardAutocompleteRequest;
import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileWizardAutocompleteRequest;
import eu.eudat.exceptions.datasetwizard.DatasetWizardCannotUnlockException;
import eu.eudat.exceptions.security.UnauthorisedException;
import eu.eudat.logic.managers.DatasetManager;
import eu.eudat.logic.managers.DatasetWizardManager;
import eu.eudat.logic.managers.UserManager;
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
import eu.eudat.logic.security.claims.ClaimedAuthorities;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.logic.services.forms.VisibilityRuleService;
import eu.eudat.logic.utilities.documents.helpers.FileEnvelope;
import eu.eudat.models.data.datasetwizard.DataManagentPlanListingModel;
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
import eu.eudat.models.data.dmp.AssociatedProfile;
import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.models.data.listingmodels.DataManagementPlanOverviewModel;
import eu.eudat.models.data.security.Principal;
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
import eu.eudat.types.ApiMessageCode;
import eu.eudat.types.Authorities;
import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.persistence.NoResultException;
import javax.transaction.Transactional;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.List;
import java.util.UUID;
import static eu.eudat.types.Authorities.ANONYMOUS;
@RestController
@CrossOrigin
@RequestMapping(value = {"api/datasetwizard"})
public class DatasetWizardController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(DatasetWizardController.class);
private Environment environment;
private DatasetManager datasetManager;
private UserManager userManager;
private ConfigLoader configLoader;
@Autowired
public DatasetWizardController(ApiContext apiContext, Environment environment, DatasetManager datasetManager, UserManager userManager, ConfigLoader configLoader) {
super(apiContext);
this.environment = environment;
this.datasetManager = datasetManager;
this.userManager = userManager;
this.configLoader = configLoader;
}
@RequestMapping(method = RequestMethod.POST, value = {"/userDmps"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<List<DataManagentPlanListingModel>>> getUserDmps(@RequestBody DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, Principal principal) throws IllegalAccessException, InstantiationException {
List<DataManagentPlanListingModel> dataManagementPlans = DatasetWizardManager.getUserDmps(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetWizardAutocompleteRequest, principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<DataManagentPlanListingModel>>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans));
}
@RequestMapping(method = RequestMethod.POST, value = {"/getAvailableProfiles"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<List<AssociatedProfile>>> getAvailableProfiles(@RequestBody DatasetProfileWizardAutocompleteRequest datasetProfileWizardAutocompleteRequest, @ClaimedAuthorities(claims = {ANONYMOUS}) Principal principal) throws IllegalAccessException, InstantiationException {
List<AssociatedProfile> dataManagementPlans = DatasetWizardManager.getAvailableProfiles(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetProfileWizardAutocompleteRequest);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<AssociatedProfile>>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans));
}
@Transactional
@RequestMapping(method = RequestMethod.GET, value = {"{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity getSingle(@PathVariable String id, @RequestHeader("Content-Type") String contentType, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException {
try {
if (contentType.equals("application/xml")) {
VisibilityRuleService visibilityRuleService = this.getApiContext().getUtilitiesService().getVisibilityRuleService();
return this.datasetManager.getDocument(id, visibilityRuleService, contentType, principal);
} else if (contentType.equals("application/msword")) {
FileEnvelope file = datasetManager.getWordDocumentFile(this.configLoader, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService(), principal);
InputStream resource = new FileInputStream(file.getFile());
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentLength(file.getFile().length());
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
responseHeaders.set("Content-Disposition", "attachment;filename=" + file.getFilename());
responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
byte[] content = IOUtils.toByteArray(resource);
resource.close();
Files.deleteIfExists(file.getFile().toPath());
return new ResponseEntity<>(content,
responseHeaders,
HttpStatus.OK);
} else {
DatasetWizardModel dataset = this.datasetManager.getSingle(id, principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
}
} catch (Exception e) {
if (e instanceof UnauthorisedException) {
if (e instanceof UnauthorisedException) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(new ResponseItem<DataManagementPlanOverviewModel>().status(ApiMessageCode.ERROR_MESSAGE));
} else if (e instanceof NoResultException) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ResponseItem<DataManagementPlanOverviewModel>().status(ApiMessageCode.ERROR_MESSAGE));
} else {
throw e;
}
}
}
return null; // ????
}
@RequestMapping(method = RequestMethod.GET, value = {"/public/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity getSinglePublic(@PathVariable String id) throws Exception {
try {
DatasetWizardModel dataset = this.datasetManager.getSinglePublic(id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
}
catch (Exception ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).message(ex.getMessage()));
}
}
@Transactional
@RequestMapping(method = RequestMethod.DELETE, value = {"{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> delete(@PathVariable(value = "id") UUID id, Principal principal) throws Exception {
new DatasetWizardManager().delete(this.getApiContext(), id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Deleted"));
}
@Transactional
@RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> createOrUpdate(@RequestBody DatasetWizardModel profile, Principal principal) throws Exception {
this.datasetManager.createOrUpdate(profile, principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<eu.eudat.data.entities.Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created").payload(null));
}
@RequestMapping(method = RequestMethod.GET, value = {"/getPDF/{id}"})
public @ResponseBody
ResponseEntity<byte[]> getPDFDocument(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException, InterruptedException {
FileEnvelope file = datasetManager.getWordDocumentFile(this.configLoader, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService(), principal);
String fileName = file.getFilename();
if (fileName.endsWith(".docx")){
fileName = fileName.substring(0, fileName.length() - 5);
}
File pdffile = datasetManager.convertToPDF(file, environment);
InputStream resource = new FileInputStream(pdffile);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentLength(pdffile.length());
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName + ".pdf");
responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
byte[] content = IOUtils.toByteArray(resource);
resource.close();
Files.deleteIfExists(file.getFile().toPath());
Files.deleteIfExists(pdffile.toPath());
return new ResponseEntity<>(content,
responseHeaders,
HttpStatus.OK);
}
@RequestMapping(method = RequestMethod.GET, value = {"/get/{id}"}, produces = "application/json")
public ResponseEntity<ResponseItem<PagedDatasetProfile>> getSingle(@PathVariable String id) {
eu.eudat.data.entities.DatasetProfile profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(profile);
PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<PagedDatasetProfile>().status(ApiMessageCode.NO_MESSAGE).payload(pagedDatasetProfile));
}
@Transactional
@RequestMapping(method = RequestMethod.GET, value = {"/{id}/unlock"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> unlock(@PathVariable(value = "id") UUID id, Principal principal) throws Exception {
try {
new DatasetWizardManager().unlock(this.getApiContext(), id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Unlocked"));
} catch (DatasetWizardCannotUnlockException datasetWizardCannotUnlockException) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<Dataset>().status(ApiMessageCode.ERROR_MESSAGE).message(datasetWizardCannotUnlockException.getMessage()));
}
}
@RequestMapping(method = RequestMethod.POST, value = {"/upload"})
public ResponseEntity<ResponseItem> datasetXmlImport(@RequestParam("file") MultipartFile file, @RequestParam("dmpId") String dmpId, @RequestParam("datasetProfileId") String datasetProfileId, Principal principal) {
try {
Dataset dataset = this.datasetManager.createDatasetFromXml(file, dmpId, datasetProfileId, principal);
if (dataset != null){
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE));
}
else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).message("Import was unsuccessful."));
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).message("Import was unsuccessful."));
}
}
@RequestMapping(method = RequestMethod.GET, value = {"profile/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity getSingleProfileUpdate(@PathVariable String id, @ClaimedAuthorities(claims = {ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException {
DatasetWizardModel dataset = this.datasetManager.datasetUpdateProfile(id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
}
}

View File

@ -1,45 +1,84 @@
package eu.eudat.controllers; package eu.eudat.controllers;
import eu.eudat.data.entities.Dataset; import eu.eudat.data.entities.Dataset;
import eu.eudat.data.query.items.item.dataset.DatasetWizardAutocompleteRequest;
import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileWizardAutocompleteRequest;
import eu.eudat.data.query.items.table.dataset.DatasetPublicTableRequest; import eu.eudat.data.query.items.table.dataset.DatasetPublicTableRequest;
import eu.eudat.data.query.items.table.dataset.DatasetTableRequest; import eu.eudat.data.query.items.table.dataset.DatasetTableRequest;
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
import eu.eudat.exceptions.datasetwizard.DatasetWizardCannotUnlockException;
import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.exceptions.security.UnauthorisedException;
import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.managers.DatasetManager;
import eu.eudat.logic.managers.DatasetWizardManager; import eu.eudat.logic.managers.DatasetWizardManager;
import eu.eudat.logic.managers.UserManager;
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.security.claims.ClaimedAuthorities;
import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.ApiContext;
import eu.eudat.logic.services.forms.VisibilityRuleService;
import eu.eudat.logic.utilities.documents.helpers.FileEnvelope;
import eu.eudat.models.data.dataset.DatasetOverviewModel; import eu.eudat.models.data.dataset.DatasetOverviewModel;
import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel;
import eu.eudat.models.data.datasetwizard.DataManagentPlanListingModel;
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
import eu.eudat.models.data.dmp.AssociatedProfile;
import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.helpers.common.DataTableData;
import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.models.data.listingmodels.DataManagementPlanOverviewModel;
import eu.eudat.models.data.listingmodels.DatasetListingModel; import eu.eudat.models.data.listingmodels.DatasetListingModel;
import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.security.Principal;
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
import eu.eudat.types.ApiMessageCode; import eu.eudat.types.ApiMessageCode;
import eu.eudat.types.Authorities; import eu.eudat.types.Authorities;
import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.persistence.NoResultException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.UUID; import java.util.UUID;
import static eu.eudat.types.Authorities.ANONYMOUS;
@RestController @RestController
@CrossOrigin @CrossOrigin
@RequestMapping(value = {"/api/datasets/"}) @RequestMapping(value = {"/api/datasets/"})
public class Datasets extends BaseController { public class Datasets extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(Datasets.class);
private Environment environment;
private DatasetManager datasetManager; private DatasetManager datasetManager;
private ConfigLoader configLoader;
private UserManager userManager;
@Autowired @Autowired
public Datasets(ApiContext apiContext, DatasetManager datasetManager) { public Datasets(ApiContext apiContext, Environment environment, DatasetManager datasetManager, ConfigLoader configLoader, UserManager userManager) {
super(apiContext); super(apiContext);
this.environment = environment;
this.datasetManager = datasetManager; this.datasetManager = datasetManager;
this.configLoader = configLoader;
this.userManager = userManager;
} }
/*
* Data Retrieval
* */
@RequestMapping(method = RequestMethod.POST, value = {"paged"}, consumes = "application/json", produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"paged"}, consumes = "application/json", produces = "application/json")
public @ResponseBody public @ResponseBody
ResponseEntity<ResponseItem<DataTableData<DatasetListingModel>>> getPaged(@RequestBody DatasetTableRequest datasetTableRequest, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { ResponseEntity<ResponseItem<DataTableData<DatasetListingModel>>> getPaged(@RequestBody DatasetTableRequest datasetTableRequest, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception {
@ -81,12 +120,46 @@ public class Datasets extends BaseController {
// } // }
} }
@Transactional @javax.transaction.Transactional
@RequestMapping(method = RequestMethod.GET, value = {"/makepublic/{id}"}, produces = "application/json") @RequestMapping(method = RequestMethod.GET, value = {"{id}"}, produces = "application/json")
public @ResponseBody public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> makePublic(@PathVariable UUID id, Principal principal, Locale locale) throws Exception { ResponseEntity getSingle(@PathVariable String id, @RequestHeader("Content-Type") String contentType, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException {
this.datasetManager.makePublic(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id); try {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message(this.getApiContext().getHelpersService().getMessageSource().getMessage("dataset.public", new Object[]{}, locale))); if (contentType.equals("application/xml")) {
VisibilityRuleService visibilityRuleService = this.getApiContext().getUtilitiesService().getVisibilityRuleService();
return this.datasetManager.getDocument(id, visibilityRuleService, contentType, principal);
} else if (contentType.equals("application/msword")) {
FileEnvelope file = datasetManager.getWordDocumentFile(this.configLoader, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService(), principal);
InputStream resource = new FileInputStream(file.getFile());
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentLength(file.getFile().length());
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
responseHeaders.set("Content-Disposition", "attachment;filename=" + file.getFilename());
responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
byte[] content = IOUtils.toByteArray(resource);
resource.close();
Files.deleteIfExists(file.getFile().toPath());
return new ResponseEntity<>(content,
responseHeaders,
HttpStatus.OK);
} else {
DatasetWizardModel dataset = this.datasetManager.getSingle(id, principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
}
} catch (Exception e) {
if (e instanceof UnauthorisedException) {
if (e instanceof UnauthorisedException) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(new ResponseItem<DataManagementPlanOverviewModel>().status(ApiMessageCode.ERROR_MESSAGE));
} else if (e instanceof NoResultException) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ResponseItem<DataManagementPlanOverviewModel>().status(ApiMessageCode.ERROR_MESSAGE));
} else {
throw e;
}
}
}
return null; // ????
} }
@RequestMapping(method = RequestMethod.POST, value = {"/datasetProfilesUsedByDatasets/paged"}, produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"/datasetProfilesUsedByDatasets/paged"}, produces = "application/json")
@ -96,6 +169,143 @@ public class Datasets extends BaseController {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataTableData<DatasetProfileListingModel>>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataTableData<DatasetProfileListingModel>>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData));
} }
@RequestMapping(method = RequestMethod.POST, value = {"/userDmps"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<List<DataManagentPlanListingModel>>> getUserDmps(@RequestBody DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, Principal principal) throws IllegalAccessException, InstantiationException {
List<DataManagentPlanListingModel> dataManagementPlans = DatasetWizardManager.getUserDmps(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetWizardAutocompleteRequest, principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<DataManagentPlanListingModel>>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans));
}
@RequestMapping(method = RequestMethod.POST, value = {"/getAvailableProfiles"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<List<AssociatedProfile>>> getAvailableProfiles(@RequestBody DatasetProfileWizardAutocompleteRequest datasetProfileWizardAutocompleteRequest, @ClaimedAuthorities(claims = {ANONYMOUS}) Principal principal) throws IllegalAccessException, InstantiationException {
List<AssociatedProfile> dataManagementPlans = DatasetWizardManager.getAvailableProfiles(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetProfileWizardAutocompleteRequest);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<AssociatedProfile>>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans));
}
@RequestMapping(method = RequestMethod.GET, value = {"/public/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity getSinglePublic(@PathVariable String id) throws Exception {
try {
DatasetWizardModel dataset = this.datasetManager.getSinglePublic(id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
}
catch (Exception ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).message(ex.getMessage()));
}
}
@RequestMapping(method = RequestMethod.GET, value = {"/get/{id}"}, produces = "application/json")
public ResponseEntity<ResponseItem<PagedDatasetProfile>> getSingle(@PathVariable String id) {
eu.eudat.data.entities.DatasetProfile profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(profile);
PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<PagedDatasetProfile>().status(ApiMessageCode.NO_MESSAGE).payload(pagedDatasetProfile));
}
@RequestMapping(method = RequestMethod.GET, value = {"profile/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity getSingleProfileUpdate(@PathVariable String id, @ClaimedAuthorities(claims = {ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException {
DatasetWizardModel dataset = this.datasetManager.datasetUpdateProfile(id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetWizardModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
}
/*
* Data Export
* */
@RequestMapping(method = RequestMethod.GET, value = {"/getPDF/{id}"})
public @ResponseBody
ResponseEntity<byte[]> getPDFDocument(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException, InterruptedException {
FileEnvelope file = datasetManager.getWordDocumentFile(this.configLoader, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService(), principal);
String fileName = file.getFilename();
if (fileName.endsWith(".docx")){
fileName = fileName.substring(0, fileName.length() - 5);
}
File pdffile = datasetManager.convertToPDF(file, environment);
InputStream resource = new FileInputStream(pdffile);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentLength(pdffile.length());
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName + ".pdf");
responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
byte[] content = IOUtils.toByteArray(resource);
resource.close();
Files.deleteIfExists(file.getFile().toPath());
Files.deleteIfExists(pdffile.toPath());
return new ResponseEntity<>(content,
responseHeaders,
HttpStatus.OK);
}
/*
* Data Management
* */
@javax.transaction.Transactional
@RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> createOrUpdate(@RequestBody DatasetWizardModel profile, Principal principal) throws Exception {
this.datasetManager.createOrUpdate(profile, principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<eu.eudat.data.entities.Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created").payload(null));
}
@Transactional
@RequestMapping(method = RequestMethod.GET, value = {"/makepublic/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> makePublic(@PathVariable UUID id, Principal principal, Locale locale) throws Exception {
this.datasetManager.makePublic(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message(this.getApiContext().getHelpersService().getMessageSource().getMessage("dataset.public", new Object[]{}, locale)));
}
@javax.transaction.Transactional
@RequestMapping(method = RequestMethod.DELETE, value = {"/delete/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> delete(@PathVariable(value = "id") UUID id, Principal principal) throws Exception {
new DatasetWizardManager().delete(this.getApiContext(), id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Deleted"));
}
@javax.transaction.Transactional
@RequestMapping(method = RequestMethod.GET, value = {"/{id}/unlock"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> unlock(@PathVariable(value = "id") UUID id, Principal principal) throws Exception {
try {
new DatasetWizardManager().unlock(this.getApiContext(), id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Unlocked"));
} catch (DatasetWizardCannotUnlockException datasetWizardCannotUnlockException) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<Dataset>().status(ApiMessageCode.ERROR_MESSAGE).message(datasetWizardCannotUnlockException.getMessage()));
}
}
/*
* Data Import
* */
@RequestMapping(method = RequestMethod.POST, value = {"/upload"})
public ResponseEntity<ResponseItem> datasetXmlImport(@RequestParam("file") MultipartFile file, @RequestParam("dmpId") String dmpId, @RequestParam("datasetProfileId") String datasetProfileId, Principal principal) {
try {
Dataset dataset = this.datasetManager.createDatasetFromXml(file, dmpId, datasetProfileId, principal);
if (dataset != null){
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE));
}
else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).message("Import was unsuccessful."));
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).message("Import was unsuccessful."));
}
}
/*
* Data Index
* */
@javax.transaction.Transactional @javax.transaction.Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/index"}) @RequestMapping(method = RequestMethod.POST, value = {"/index"})
public @ResponseBody public @ResponseBody
@ -112,12 +322,6 @@ public class Datasets extends BaseController {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<eu.eudat.data.entities.Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Cleared").payload(null)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<eu.eudat.data.entities.Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Cleared").payload(null));
} }
@javax.transaction.Transactional
@RequestMapping(method = RequestMethod.DELETE, value = {"/delete/{id}"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Dataset>> delete(@PathVariable(value = "id") UUID id, Principal principal) throws Exception {
new DatasetWizardManager().delete(this.getApiContext(), id);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Dataset>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Deleted"));
}
} }

View File

@ -31,6 +31,7 @@ import eu.eudat.logic.services.operations.authentication.AuthenticationService;
import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.models.data.login.Credentials; import eu.eudat.models.data.login.Credentials;
import eu.eudat.models.data.login.LoginInfo; import eu.eudat.models.data.login.LoginInfo;
import eu.eudat.models.data.principal.PrincipalModel;
import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.security.Principal;
import eu.eudat.types.ApiMessageCode; import eu.eudat.types.ApiMessageCode;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -91,17 +92,17 @@ public class Login {
@Transactional @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/externallogin"}, consumes = "application/json", produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"/externallogin"}, consumes = "application/json", produces = "application/json")
public @ResponseBody public @ResponseBody
ResponseEntity<ResponseItem<Principal>> externallogin(@RequestBody LoginInfo credentials) throws GeneralSecurityException, NullEmailException { ResponseEntity<ResponseItem<PrincipalModel>> externallogin(@RequestBody LoginInfo credentials) throws GeneralSecurityException, NullEmailException {
logger.info("Trying To Login With " + credentials.getProvider()); logger.info("Trying To Login With " + credentials.getProvider());
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Principal>().payload(customAuthenticationProvider.authenticate(credentials)).status(ApiMessageCode.SUCCESS_MESSAGE)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<PrincipalModel>().payload(customAuthenticationProvider.authenticate(credentials)).status(ApiMessageCode.SUCCESS_MESSAGE));
} }
@Transactional @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/nativelogin"}, consumes = "application/json", produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"/nativelogin"}, consumes = "application/json", produces = "application/json")
public @ResponseBody public @ResponseBody
ResponseEntity<ResponseItem<Principal>> nativelogin(@RequestBody Credentials credentials) throws NullEmailException { ResponseEntity<ResponseItem<PrincipalModel>> nativelogin(@RequestBody Credentials credentials) throws NullEmailException {
logger.info(credentials.getUsername() + " Trying To Login"); logger.info(credentials.getUsername() + " Trying To Login");
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Principal>().payload(userManager.authenticate(this.nonVerifiedUserAuthenticationService, credentials)).status(ApiMessageCode.SUCCESS_MESSAGE)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<PrincipalModel>().payload(userManager.authenticate(this.nonVerifiedUserAuthenticationService, credentials)).status(ApiMessageCode.SUCCESS_MESSAGE));
} }
@RequestMapping(method = RequestMethod.GET, value = {"/twitterRequestToken"}, produces = "application/json") @RequestMapping(method = RequestMethod.GET, value = {"/twitterRequestToken"}, produces = "application/json")
@ -148,9 +149,11 @@ public class Login {
@RequestMapping(method = RequestMethod.POST, value = {"/me"}, consumes = "application/json", produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"/me"}, consumes = "application/json", produces = "application/json")
public @ResponseBody public @ResponseBody
ResponseEntity<ResponseItem<Principal>> authMe(Principal principal) throws NullEmailException { ResponseEntity<ResponseItem<PrincipalModel>> authMe(Principal principal) throws NullEmailException {
logger.info(principal + " Getting Me"); logger.info(principal + " Getting Me");
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Principal>().payload(this.nonVerifiedUserAuthenticationService.Touch(principal.getToken())).status(ApiMessageCode.NO_MESSAGE)); Principal principal1 = this.nonVerifiedUserAuthenticationService.Touch(principal.getToken());
PrincipalModel principalModel = PrincipalModel.fromEntity(principal1);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<PrincipalModel>().payload(principalModel).status(ApiMessageCode.NO_MESSAGE));
} }
@Transactional @Transactional

View File

@ -17,6 +17,7 @@ public class PrincipalBuilder extends Builder<Principal> {
private UUID id; private UUID id;
private UUID token; private UUID token;
private String name; private String name;
private String email;
private Date expiresAt; private Date expiresAt;
private String avatarUrl; private String avatarUrl;
private Set<Authorities> authorities; private Set<Authorities> authorities;
@ -43,6 +44,11 @@ public class PrincipalBuilder extends Builder<Principal> {
return this; return this;
} }
public PrincipalBuilder email(String email) {
this.email = email;
return this;
}
public PrincipalBuilder expiresAt(Date expiresAt) { public PrincipalBuilder expiresAt(Date expiresAt) {
this.expiresAt = expiresAt; this.expiresAt = expiresAt;
return this; return this;
@ -98,6 +104,7 @@ public class PrincipalBuilder extends Builder<Principal> {
Principal principal = new Principal(); Principal principal = new Principal();
principal.setAuthorities(authorities); principal.setAuthorities(authorities);
principal.setName(name); principal.setName(name);
principal.setEmail(email);
principal.setExpiresAt(expiresAt); principal.setExpiresAt(expiresAt);
principal.setToken(token); principal.setToken(token);
principal.setId(id); principal.setId(id);

View File

@ -24,6 +24,7 @@ import eu.eudat.models.data.dmp.DataManagementPlan;
import eu.eudat.models.data.doi.DOIRequest; import eu.eudat.models.data.doi.DOIRequest;
import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.helpers.common.DataTableData;
import eu.eudat.models.data.login.Credentials; import eu.eudat.models.data.login.Credentials;
import eu.eudat.models.data.principal.PrincipalModel;
import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.security.Principal;
import eu.eudat.models.data.userinfo.UserListingModel; import eu.eudat.models.data.userinfo.UserListingModel;
import eu.eudat.models.data.userinfo.UserProfile; import eu.eudat.models.data.userinfo.UserProfile;
@ -105,10 +106,11 @@ public class UserManager {
.createOrUpdate(userInfo); .createOrUpdate(userInfo);
} }
public Principal authenticate(AuthenticationService authenticationServiceImpl, Credentials credentials) throws NullEmailException { public PrincipalModel authenticate(AuthenticationService authenticationServiceImpl, Credentials credentials) throws NullEmailException {
Principal principal = authenticationServiceImpl.Touch(credentials); Principal principal = authenticationServiceImpl.Touch(credentials);
if (principal == null) throw new UnauthorisedException("Could not Sign In User"); if (principal == null) throw new UnauthorisedException("Could not Sign In User");
return principal; PrincipalModel principalModel = PrincipalModel.fromEntity(principal);
return principalModel;
} }
public DataTableData<UserListingModel> getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem, Principal principal) throws Exception { public DataTableData<UserListingModel> getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem, Principal principal) throws Exception {

View File

@ -4,6 +4,7 @@ import eu.eudat.exceptions.security.NonValidTokenException;
import eu.eudat.exceptions.security.NullEmailException; import eu.eudat.exceptions.security.NullEmailException;
import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.exceptions.security.UnauthorisedException;
import eu.eudat.models.data.login.LoginInfo; import eu.eudat.models.data.login.LoginInfo;
import eu.eudat.models.data.principal.PrincipalModel;
import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.security.Principal;
import eu.eudat.logic.security.validators.TokenValidatorFactory; import eu.eudat.logic.security.validators.TokenValidatorFactory;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -22,11 +23,11 @@ public class CustomAuthenticationProvider {
@Autowired @Autowired
private TokenValidatorFactory tokenValidatorFactory; private TokenValidatorFactory tokenValidatorFactory;
public Principal authenticate(LoginInfo credentials) throws GeneralSecurityException, NullEmailException { public PrincipalModel authenticate(LoginInfo credentials) throws GeneralSecurityException, NullEmailException {
String token = credentials.getTicket(); String token = credentials.getTicket();
try { try {
Principal principal = this.tokenValidatorFactory.getProvider(credentials.getProvider()).validateToken(credentials); Principal principal = this.tokenValidatorFactory.getProvider(credentials.getProvider()).validateToken(credentials);
return principal; return PrincipalModel.fromEntity(principal);
} catch (NonValidTokenException e) { } catch (NonValidTokenException e) {
logger.error("Could not validate a user by his token! Reason: " + e.getMessage(), e); logger.error("Could not validate a user by his token! Reason: " + e.getMessage(), e);
throw new UnauthorisedException("Token validation failed - Not a valid token"); throw new UnauthorisedException("Token validation failed - Not a valid token");

View File

@ -78,7 +78,9 @@ public class NonVerifiedUserEmailAuthenticationService extends AbstractAuthentic
} }
Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class) Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class)
.id(user.getId()).token(token.getToken()) .id(user.getId()).token(token.getToken())
.expiresAt(token.getExpiresAt()).name(user.getName()) .expiresAt(token.getExpiresAt())
.name(user.getName())
.email(user.getEmail())
.avatarUrl(avatarUrl) .avatarUrl(avatarUrl)
.culture(culture) .culture(culture)
.language(language) .language(language)

View File

@ -87,7 +87,9 @@ public class VerifiedUserAuthenticationService extends AbstractAuthenticationSer
} }
Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class) Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class)
.id(user.getId()).token(token.getToken()) .id(user.getId()).token(token.getToken())
.expiresAt(token.getExpiresAt()).name(user.getName()) .expiresAt(token.getExpiresAt())
.name(user.getName())
.email(user.getEmail())
.avatarUrl(avatarUrl) .avatarUrl(avatarUrl)
.culture(culture) .culture(culture)
.language(language) .language(language)

View File

@ -0,0 +1,131 @@
package eu.eudat.models.data.principal;
import eu.eudat.models.data.security.Principal;
import eu.eudat.types.Authorities;
import java.util.Date;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
public class PrincipalModel {
private UUID id;
private UUID token;
private String name;
private String email;
private Date expiresAt;
private String avatarUrl;
private Set<Authorities> authorities;
private String culture;
private String language;
private String timezone;
private String zenodoEmail;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getToken() {
return token;
}
public void setToken(UUID token) {
this.token = token;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getExpiresAt() {
return expiresAt;
}
public void setExpiresAt(Date expiresAt) {
this.expiresAt = expiresAt;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
public Set<Authorities> getAuthz() {
return authorities;
}
public Set<Integer> getAuthorities() {
return authorities.stream().map(authz -> authz.getValue()).collect(Collectors.toSet());
}
public void setAuthorities(Set<Authorities> authorities) {
this.authorities = authorities;
}
public String getCulture() {
return culture;
}
public void setCulture(String culture) {
this.culture = culture;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
public String getZenodoEmail() {
return zenodoEmail;
}
public void setZenodoEmail(String zenodoEmail) {
this.zenodoEmail = zenodoEmail;
}
public static PrincipalModel fromEntity(Principal principal) {
PrincipalModel model = new PrincipalModel();
model.setId(principal.getId());
model.setToken(principal.getToken());
model.setAuthorities(principal.getAuthz());
model.setAvatarUrl(principal.getAvatarUrl());
model.setCulture(principal.getCulture());
model.setEmail(principal.getEmail());
model.setExpiresAt(principal.getExpiresAt());
model.setLanguage(principal.getLanguage());
model.setName(principal.getName());
model.setTimezone(principal.getTimezone());
model.setZenodoEmail(principal.getZenodoEmail());
return model;
}
}

View File

@ -12,6 +12,7 @@ public class Principal {
private UUID id; private UUID id;
private UUID token; private UUID token;
private String name; private String name;
private String email;
private Date expiresAt; private Date expiresAt;
private String avatarUrl; private String avatarUrl;
private Set<Authorities> authorities; private Set<Authorities> authorities;
@ -47,6 +48,14 @@ public class Principal {
this.name = name; this.name = name;
} }
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getExpiresAt() { public Date getExpiresAt() {
return expiresAt; return expiresAt;
} }

View File

@ -22,7 +22,7 @@ public class UserInfo implements DataModel<eu.eudat.data.entities.UserInfo, User
private Date lastloggedin = null; private Date lastloggedin = null;
private String additionalinfo; // private String additionalinfo;
public UUID getId() { public UUID getId() {
return id; return id;
@ -88,13 +88,13 @@ public class UserInfo implements DataModel<eu.eudat.data.entities.UserInfo, User
this.lastloggedin = lastloggedin; this.lastloggedin = lastloggedin;
} }
public String getAdditionalinfo() { /*public String getAdditionalinfo() {
return additionalinfo; return additionalinfo;
} }
public void setAdditionalinfo(String additionalinfo) { public void setAdditionalinfo(String additionalinfo) {
this.additionalinfo = additionalinfo; this.additionalinfo = additionalinfo;
} }*/
@Override @Override
public UserInfo fromDataModel(eu.eudat.data.entities.UserInfo entity) { public UserInfo fromDataModel(eu.eudat.data.entities.UserInfo entity) {
@ -111,7 +111,7 @@ public class UserInfo implements DataModel<eu.eudat.data.entities.UserInfo, User
entity.setId(this.getId()); entity.setId(this.getId());
entity.setEmail(this.getEmail()); entity.setEmail(this.getEmail());
entity.setName(this.getName()); entity.setName(this.getName());
entity.setAdditionalinfo(this.getAdditionalinfo()); //entity.setAdditionalinfo(this.getAdditionalinfo());
entity.setAuthorization_level(this.getAuthorization_level()); entity.setAuthorization_level(this.getAuthorization_level());
entity.setCreated(this.getCreated()); entity.setCreated(this.getCreated());
entity.setLastloggedin(this.getLastloggedin()); entity.setLastloggedin(this.getLastloggedin());

View File

@ -17,7 +17,7 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
private String name; private String name;
private Date created; private Date created;
private Date lastloggedin; private Date lastloggedin;
private String additionalinfo; //private String additionalinfo;
private List<Integer> appRoles; private List<Integer> appRoles;
public UUID getId() { public UUID getId() {
@ -69,12 +69,12 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
this.lastloggedin = lastloggedin; this.lastloggedin = lastloggedin;
} }
public String getAdditionalinfo() { /*public String getAdditionalinfo() {
return additionalinfo; return additionalinfo;
} }
public void setAdditionalinfo(String additionalinfo) { public void setAdditionalinfo(String additionalinfo) {
this.additionalinfo = additionalinfo; this.additionalinfo = additionalinfo;
} }*/
public List<Integer> getAppRoles() { public List<Integer> getAppRoles() {
return appRoles; return appRoles;
@ -92,7 +92,7 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
this.name = entity.getName(); this.name = entity.getName();
this.created = entity.getCreated(); this.created = entity.getCreated();
this.lastloggedin = entity.getLastloggedin(); this.lastloggedin = entity.getLastloggedin();
this.additionalinfo = entity.getAdditionalinfo(); // this.additionalinfo = entity.getAdditionalinfo();
this.appRoles = entity.getUserRoles().stream().map(item -> item.getRole()).collect(Collectors.toList()); this.appRoles = entity.getUserRoles().stream().map(item -> item.getRole()).collect(Collectors.toList());
return this; return this;
} }
@ -107,7 +107,7 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
userInfo.setName(this.name); userInfo.setName(this.name);
userInfo.setCreated(this.created); userInfo.setCreated(this.created);
userInfo.setLastloggedin(this.lastloggedin); userInfo.setLastloggedin(this.lastloggedin);
userInfo.setAdditionalinfo(this.additionalinfo); // userInfo.setAdditionalinfo(this.additionalinfo);
return userInfo; return userInfo;
} }

View File

@ -1,27 +1,37 @@
package eu.eudat.models.data.userinfo; package eu.eudat.models.data.userinfo;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import eu.eudat.data.entities.*; import eu.eudat.data.entities.*;
import eu.eudat.data.entities.UserInfo; import eu.eudat.data.entities.UserInfo;
import eu.eudat.models.DataModel; import eu.eudat.models.DataModel;
import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.dmp.DataManagementPlan;
import net.minidev.json.parser.JSONParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date; import java.io.IOException;
import java.util.List; import java.util.*;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* Created by ikalyvas on 8/24/2018. * Created by ikalyvas on 8/24/2018.
*/ */
public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, UserProfile> { public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, UserProfile> {
private static final Logger logger = LoggerFactory.getLogger(UserProfile.class);
private UUID id; private UUID id;
private String email; private String email;
private Short usertype; private Short usertype;
private String name; private String name;
private Date lastloggedin; private Date lastloggedin;
private String additionalinfo; //private String additionalinfo;
private List<DataManagementPlan> associatedDmps; private List<DataManagementPlan> associatedDmps;
private String zenodoEmail;
private Map<String, Object> language;
private String timezone;
private Map<String, Object> culture;
private String avatarUrl;
public UUID getId() { public UUID getId() {
return id; return id;
@ -63,13 +73,13 @@ public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, U
this.lastloggedin = lastloggedin; this.lastloggedin = lastloggedin;
} }
public String getAdditionalinfo() { /*public String getAdditionalinfo() {
return additionalinfo; return additionalinfo;
} }
public void setAdditionalinfo(String additionalinfo) { public void setAdditionalinfo(String additionalinfo) {
this.additionalinfo = additionalinfo; this.additionalinfo = additionalinfo;
} }*/
public List<DataManagementPlan> getAssociatedDmps() { public List<DataManagementPlan> getAssociatedDmps() {
return associatedDmps; return associatedDmps;
@ -79,6 +89,46 @@ public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, U
this.associatedDmps = associatedDmps; this.associatedDmps = associatedDmps;
} }
public String getZenodoEmail() {
return zenodoEmail;
}
public void setZenodoEmail(String zenodoEmail) {
this.zenodoEmail = zenodoEmail;
}
public Map<String, Object> getLanguage() {
return language;
}
public void setLanguage(Map<String, Object> language) {
this.language = language;
}
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
public Map<String, Object> getCulture() {
return culture;
}
public void setCulture(Map<String, Object> culture) {
this.culture = culture;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
@Override @Override
public UserProfile fromDataModel(UserInfo entity) { public UserProfile fromDataModel(UserInfo entity) {
this.id = entity.getId(); this.id = entity.getId();
@ -86,7 +136,17 @@ public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, U
this.usertype = entity.getUsertype(); this.usertype = entity.getUsertype();
this.name = entity.getName(); this.name = entity.getName();
this.lastloggedin = entity.getLastloggedin(); this.lastloggedin = entity.getLastloggedin();
this.additionalinfo = entity.getAdditionalinfo(); //this.additionalinfo = entity.getAdditionalinfo();
try {
Map<String, Object> additionalInfo = new ObjectMapper().readValue(entity.getAdditionalinfo(), HashMap.class);
this.language = (Map)additionalInfo.get("language");
this.culture = (Map) additionalInfo.get("culture");
this.timezone = (String) additionalInfo.get("timezone");
this.zenodoEmail = (String) additionalInfo.get("zenodoEmail");
this.avatarUrl = (String) additionalInfo.get("avatarUrl");
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
return this; return this;
} }

View File

@ -18,7 +18,7 @@ http-logger.server-address = http://localhost:31311
pdf.converter.url=http://localhost:88/ pdf.converter.url=http://localhost:88/
####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS##########
configuration.externalUrls=ExternalUrls.xml configuration.externalUrls=externalUrls/ExternalUrls.xml
configuration.rda=RDACommonStandards.txt configuration.rda=RDACommonStandards.txt
configuration.h2020template=documents/h2020.docx configuration.h2020template=documents/h2020.docx
configuration.configurable_login_providers=configurableLoginProviders.json configuration.configurable_login_providers=configurableLoginProviders.json

View File

@ -139,6 +139,14 @@ const appRoutes: Routes = [
title: 'GENERAL.TITLES.PRIVACY' title: 'GENERAL.TITLES.PRIVACY'
} }
}, },
{
path: 'opensource-licences',
loadChildren: () => import('./ui/sidebar/sidebar-footer/opensource-licences/opensource-licenses.module').then(m => m.OpensourceLicencesModule),
data: {
breadcrumb: true,
title: 'GENERAL.TITLES.OPENSOURCE-LICENCES'
}
},
{ {
path: 'terms-and-conditions', path: 'terms-and-conditions',
loadChildren: () => import('./ui/sidebar/sidebar-footer/terms/terms.module').then(m => m.TermsModule), loadChildren: () => import('./ui/sidebar/sidebar-footer/terms/terms.module').then(m => m.TermsModule),

View File

@ -4,6 +4,7 @@ export interface Principal {
id: string; id: string;
token: string; token: string;
name: string; name: string;
email: string;
expiresAt: Date; expiresAt: Date;
authorities: AppRole[]; authorities: AppRole[];
avatarUrl: string; avatarUrl: string;

View File

@ -5,7 +5,7 @@ import { DmpOverviewModel } from '../dmp/dmp-overview';
export interface DatasetOverviewModel { export interface DatasetOverviewModel {
id: string; id: string;
label: string; label: string;
status: any; status: number;
datasetTemplate: DatasetProfileModel; datasetTemplate: DatasetProfileModel;
users: any[]; users: any[];

View File

@ -5,6 +5,10 @@ export interface UserListingModel {
name: String; name: String;
email: string; email: string;
appRoles: AppRole[]; appRoles: AppRole[];
additionalinfo: any;
associatedDmps: any[]; associatedDmps: any[];
language: any;
culture: any;
timezone: String;
zenodoEmail: String;
avatarUrl: String;
} }

View File

@ -19,7 +19,7 @@ export class DatasetWizardService {
private headers = new HttpHeaders(); private headers = new HttpHeaders();
constructor(private http: BaseHttpService, private httpClient: HttpClient, private configurationService: ConfigurationService) { constructor(private http: BaseHttpService, private httpClient: HttpClient, private configurationService: ConfigurationService) {
this.actionUrl = configurationService.server + 'datasetwizard/'; this.actionUrl = configurationService.server + 'datasets/';
} }
// public userDmps(criteria: RequestItem<DmpCriteria>): Observable<DmpModel[]> { // public userDmps(criteria: RequestItem<DmpCriteria>): Observable<DmpModel[]> {
@ -39,7 +39,7 @@ export class DatasetWizardService {
} }
public delete(id: string): Observable<DatasetWizardModel> { public delete(id: string): Observable<DatasetWizardModel> {
return this.http.delete<DatasetWizardModel>(this.actionUrl + id, { headers: this.headers }); return this.http.delete<DatasetWizardModel>(this.actionUrl + 'delete/' + id, { headers: this.headers });
} }
createDataset(datasetModel: DatasetWizardModel): Observable<DatasetWizardModel> { createDataset(datasetModel: DatasetWizardModel): Observable<DatasetWizardModel> {

View File

@ -16,7 +16,7 @@ export class DatasetExternalAutocompleteService {
private httpClient: HttpClient, private httpClient: HttpClient,
private datasetProfileService: DatasetProfileService, private datasetProfileService: DatasetProfileService,
private configurationService: ConfigurationService) { private configurationService: ConfigurationService) {
this.actionUrl = configurationService.server + 'datasetwizard/'; this.actionUrl = configurationService.server + 'datasets/';
} }
getDatasetProfileById(datasetProfileID) { getDatasetProfileById(datasetProfileID) {

View File

@ -90,7 +90,8 @@ export class DatasetService {
return this.httpClient.get(this.actionUrl + 'getPDF/' + id, { responseType: 'blob', observe: 'response', headers: headerPdf }); return this.httpClient.get(this.actionUrl + 'getPDF/' + id, { responseType: 'blob', observe: 'response', headers: headerPdf });
} }
public downloadJson(id: string): Observable<HttpResponse<Blob>> { //GK: NO
return this.httpClient.get(this.actionUrl + 'rda/' + id, { responseType: 'blob', observe: 'response' }); // public downloadJson(id: string): Observable<HttpResponse<Blob>> {
} // return this.httpClient.get(this.actionUrl + 'rda/' + id, { responseType: 'blob', observe: 'response' });
// }
} }

View File

@ -12,8 +12,8 @@
<p class="col dataset-label p-0 ml-3 mb-0">{{ dataset.label }}</p> <p class="col dataset-label p-0 ml-3 mb-0">{{ dataset.label }}</p>
</div> </div>
<div class="row d-flex align-items-center mt-3 mb-4 label-txt"> <div class="row d-flex align-items-center mt-3 mb-4 label-txt">
<div *ngIf="isUserDatasetRelated()" class="d-flex"> <div *ngIf="isUserDatasetRelated()" class="d-flex mr-2">
<p class="ml-0 mr-3 mb-0 label2-txt"> <p class="ml-0 mb-0 label2-txt">
{{ roleDisplayFromList(dataset.users) }} {{ roleDisplayFromList(dataset.users) }}
</p> </p>
</div> </div>
@ -33,12 +33,12 @@
<mat-icon class="status-icon">lock_outline</mat-icon> <mat-icon class="status-icon">lock_outline</mat-icon>
{{'DMP-OVERVIEW.LOCKED' | translate}} {{'DMP-OVERVIEW.LOCKED' | translate}}
</div> </div>
<div class="d-flex ml-2 mr-3">{{'GENERAL.STATUSES.EDIT' | translate}} : <div class="d-flex ml-2 mr-2">{{'GENERAL.STATUSES.EDIT' | translate}} :
{{dataset.modified | date:"longDate"}} {{dataset.modified | date:"longDate"}}
</div> </div>
<div class="d-flex ml-2 mr-4"> <div class="d-flex ml-2 mr-4">
<div *ngIf="dataset.status" class="d-flex flex-row uppercase"> <div *ngIf="dataset.status" class="d-flex flex-row uppercase">
<mat-icon class="status-icon">check</mat-icon> <mat-icon class="status-icon check-icon">check</mat-icon>
{{'TYPES.DATASET-STATUS.FINALISED' | translate}} {{'TYPES.DATASET-STATUS.FINALISED' | translate}}
</div> </div>
</div> </div>
@ -49,12 +49,12 @@
matTooltipPosition="above"> matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon> <mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
</button> </button>
<button *ngIf="isDraftDataset(dataset) && isUserOwner" (click)="editClicked(dataset)" <button *ngIf="isDraftDataset(dataset) && isUserOwner && !lockStatus" (click)="editClicked(dataset)"
mat-mini-fab class="mr-3 actions-btn" mat-mini-fab class="mr-3 actions-btn"
matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above"> matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">create</mat-icon> <mat-icon class="mat-mini-fab-icon">create</mat-icon>
</button> </button>
<button *ngIf="isDraftDataset(dataset) && isUserOwner" (click)="deleteClicked()" mat-mini-fab <button *ngIf="isUserOwner && !lockStatus" (click)="deleteClicked()" mat-mini-fab
class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}"
matTooltipPosition="above"> matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">delete</mat-icon> <mat-icon class="mat-mini-fab-icon">delete</mat-icon>
@ -91,17 +91,17 @@
</div> </div>
<div class="col-md-4 col-lg-4 p-0"> <div class="col-md-4 col-lg-4 p-0">
<div class="frame mb-3 pt-4 pl-3 pr-5 pb-1"> <div class="frame mb-3 pt-4 pl-3 pr-5 pb-1">
<!-- <div *ngIf="!dataset.status && isDraftDataset(dataset) && isUserOwner"> <div *ngIf="!dataset.status && isDraftDataset(dataset) && isUserOwner && !lockStatus">
<div class="row ml-0 mr-0 pl-4 d-flex align-items-center" (click)="finalize(dataset)"> <div class="row ml-0 mr-0 pl-4 d-flex align-items-center" (click)="finalize(dataset)">
<button mat-mini-fab class="finalize-btn"> <button mat-mini-fab class="finalize-btn">
<mat-icon class="mat-mini-fab-icon">check</mat-icon> <mat-icon class="mat-mini-fab-icon check-icon">check</mat-icon>
</button> </button>
<p class="mb-0 pl-2 finalize-txt">{{ 'DMP-LISTING.ACTIONS.FINALIZE' | translate }}</p> <p class="mb-0 pl-2 frame-txt">{{ 'DMP-LISTING.ACTIONS.FINALIZE' | translate }}</p>
</div> </div>
<div class="row ml-0 mr-0 pl-4 d-flex align-items-center"> <div class="row ml-0 mr-0 pl-4 d-flex align-items-center">
<hr class="hr-line"> <hr class="hr-line">
</div> </div>
</div> --> </div>
<div class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center"> <div class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center">
<button mat-mini-fab class="frame-btn" [matMenuTriggerFor]="exportMenu"> <button mat-mini-fab class="frame-btn" [matMenuTriggerFor]="exportMenu">
<mat-icon class="mat-mini-fab-icon">open_in_new</mat-icon> <mat-icon class="mat-mini-fab-icon">open_in_new</mat-icon>
@ -109,6 +109,12 @@
<p class="mb-0 mr-0 pl-2 frame-txt" [matMenuTriggerFor]="exportMenu"> <p class="mb-0 mr-0 pl-2 frame-txt" [matMenuTriggerFor]="exportMenu">
{{ 'DMP-LISTING.ACTIONS.EXPORT' | translate }}</p> {{ 'DMP-LISTING.ACTIONS.EXPORT' | translate }}</p>
</div> </div>
<div *ngIf="!dataset.public && showPublishButton(dataset) && isUserOwner && dataset.dmp.isPublic" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center" (click)="publish(dataset.id)">
<button mat-mini-fab class="frame-btn">
<mat-icon class="mat-mini-fab-icon">public</mat-icon>
</button>
<p class="mb-0 pl-2 frame-txt">{{ 'DMP-LISTING.ACTIONS.MAKE-PUBLIC' | translate }}</p>
</div>
<mat-menu #exportMenu="matMenu" xPosition="before"> <mat-menu #exportMenu="matMenu" xPosition="before">
<button mat-menu-item (click)="downloadPDF(dataset.id)"> <button mat-menu-item (click)="downloadPDF(dataset.id)">
<i class="fa fa-file-pdf-o pr-2"></i> <i class="fa fa-file-pdf-o pr-2"></i>
@ -122,10 +128,11 @@
<i class="fa fa-file-code-o pr-2"></i> <i class="fa fa-file-code-o pr-2"></i>
<span>{{'GENERAL.FILE-TYPES.XML' | translate}}</span> <span>{{'GENERAL.FILE-TYPES.XML' | translate}}</span>
</button> </button>
<button mat-menu-item (click)="downloadJson(dataset.id)"> <!-- GK: NO-->
<!-- <button mat-menu-item (click)="downloadJson(dataset.id)">
<i class="fa fa-file-o pr-2"></i> <i class="fa fa-file-o pr-2"></i>
<span>{{'GENERAL.FILE-TYPES.JSON' | translate}}</span> <span>{{'GENERAL.FILE-TYPES.JSON' | translate}}</span>
</button> </button> -->
</mat-menu> </mat-menu>
</div> </div>
<div class="frame mb-3 pt-4 pl-3 pr-3 pb-1"> <div class="frame mb-3 pt-4 pl-3 pr-3 pb-1">

View File

@ -29,6 +29,10 @@
color: #A7A7A7; color: #A7A7A7;
} }
.check-icon {
font-weight: bold;
}
.account-icon { .account-icon {
font-size: 2.5em; font-size: 2.5em;
} }
@ -52,7 +56,7 @@
.dmp-btn { .dmp-btn {
width: 35em; width: 35em;
height: 2.3em; min-height: 2.3em;
background-color: #129D99; background-color: #129D99;
border-radius: 4px; border-radius: 4px;
flex-direction: row; flex-direction: row;
@ -76,15 +80,15 @@
.frame-btn { .frame-btn {
border: 1px solid #212121; border: 1px solid #212121;
color: black; color: black;
background: #FFFFFF;
} }
.finalize-btn { .finalize-btn {
border: 1px solid #129D99; border: 1px solid #F7DD72;
color: #129D99; background: #F5DB71;
} }
.frame-btn, .finalize-btn { .frame-btn, .finalize-btn {
background: #FFFFFF;
box-shadow: 0px 2px 6px #00000029; box-shadow: 0px 2px 6px #00000029;
} }
@ -177,6 +181,7 @@
overflow: hidden; overflow: hidden;
color: #FFFFFF; color: #FFFFFF;
opacity: 0.8; opacity: 0.8;
text-align: left;
} }
.doi-label { .doi-label {
@ -221,10 +226,6 @@
color: #000000; color: #000000;
} }
.finalize-txt {
color: #129D99;
}
.frame-txt, .finalize-txt { .frame-txt, .finalize-txt {
font-size: 0.75em; font-size: 0.75em;
font-weight: bold; font-weight: bold;

View File

@ -28,6 +28,9 @@ import { DatasetCopyDialogueComponent } from '../dataset-wizard/dataset-copy-dia
import { DmpService } from '@app/core/services/dmp/dmp.service'; import { DmpService } from '@app/core/services/dmp/dmp.service';
import { ResearcherModel } from '@app/core/model/researcher/researcher'; import { ResearcherModel } from '@app/core/model/researcher/researcher';
import { LockService } from '@app/core/services/lock/lock.service'; import { LockService } from '@app/core/services/lock/lock.service';
import { DatasetsToBeFinalized } from '@app/core/model/dataset/datasets-toBeFinalized';
import { DatasetModel } from '@app/core/model/dataset/dataset';
import { DatasetWizardModel } from '@app/core/model/dataset/dataset-wizard';
@Component({ @Component({
@ -38,7 +41,8 @@ import { LockService } from '@app/core/services/lock/lock.service';
export class DatasetOverviewComponent extends BaseComponent implements OnInit { export class DatasetOverviewComponent extends BaseComponent implements OnInit {
dataset: DatasetOverviewModel; dataset: DatasetOverviewModel;
datasetWizardModel: DatasetWizardEditorModel; datasetWizardEditorModel: DatasetWizardEditorModel;
datasetWizardModel: DatasetWizardModel;
isNew = true; isNew = true;
isFinalized = false; isFinalized = false;
isPublicView = true; isPublicView = true;
@ -87,10 +91,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
this.dataset = data; this.dataset = data;
this.getDmpResearchers(); this.getDmpResearchers();
this.getDmpUsers(); this.getDmpUsers();
this.datasetWizardService.getSingle(this.dataset.id).pipe(takeUntil(this._destroyed)) this.getDatasetWizardModel(this.dataset.id);
.subscribe(data => {
this.datasetWizardModel = new DatasetWizardEditorModel().fromModel(data);
});
this.checkLockStatus(this.dataset.id); this.checkLockStatus(this.dataset.id);
this.setIsUserOwner(); this.setIsUserOwner();
const breadCrumbs = []; const breadCrumbs = [];
@ -116,10 +117,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
this.dataset = data; this.dataset = data;
this.getDmpResearchers(); this.getDmpResearchers();
this.getDmpUsers(); this.getDmpUsers();
this.datasetWizardService.getSingle(this.dataset.id).pipe(takeUntil(this._destroyed)) this.getDatasetWizardModel(this.dataset.id);
.subscribe(data => {
this.datasetWizardModel = new DatasetWizardEditorModel().fromModel(data);
});
this.checkLockStatus(this.dataset.id); this.checkLockStatus(this.dataset.id);
this.setIsUserOwner(); this.setIsUserOwner();
const breadCrumbs = []; const breadCrumbs = [];
@ -138,6 +136,14 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
}); });
} }
getDatasetWizardModel(id: string) {
this.datasetWizardService.getSingle(id).pipe(takeUntil(this._destroyed))
.subscribe(data => {
this.datasetWizardEditorModel = new DatasetWizardEditorModel().fromModel(data);
this.datasetWizardModel = data;
});
}
checkLockStatus(id: string) { checkLockStatus(id: string) {
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed)) this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
.subscribe(lockStatus => this.lockStatus = lockStatus); .subscribe(lockStatus => this.lockStatus = lockStatus);
@ -278,8 +284,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
.pipe(takeUntil(this._destroyed)) .pipe(takeUntil(this._destroyed))
.subscribe( .subscribe(
complete => { complete => {
this.onCallbackSuccess(); this.onDeleteCallbackSuccess();
this.router.navigate(['/datasets']);
}, },
error => this.onDeleteCallbackError(error) error => this.onDeleteCallbackError(error)
); );
@ -291,23 +296,33 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
this.router.navigate(['/plans/overview/' + dmpId]); this.router.navigate(['/plans/overview/' + dmpId]);
} }
onCallbackSuccess(): void { onDeleteCallbackSuccess(): void {
this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-DATASET-PROFILE-DELETE'), SnackBarNotificationLevel.Success);
this.router.navigate(['/datasets']);
}
onUpdateCallbackSuccess(): void {
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
this.reloadPage();
} }
onDeleteCallbackError(error) { onDeleteCallbackError(error) {
this.uiNotificationService.snackBarNotification(error.error.message ? error.error.message : this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-DELETE'), SnackBarNotificationLevel.Error); this.uiNotificationService.snackBarNotification(error.error.message ? error.error.message : this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-DELETE'), SnackBarNotificationLevel.Error);
} }
onUpdateCallbackError(error) {
this.uiNotificationService.snackBarNotification(error.error.message ? error.error.message : this.language.instant('DATASET-UPLOAD.SNACK-BAR.UNSUCCESSFUL'), SnackBarNotificationLevel.Error);
}
public getOrcidPath(): string { public getOrcidPath(): string {
return this.configurationService.orcidPath; return this.configurationService.orcidPath;
} }
getOrcidPathForResearcher(reference: string): string { getOrcidPathForResearcher(reference: string): string {
const path = this.getOrcidPath(); const path = this.getOrcidPath();
const userId = reference.split(':')[1]; const userId = reference.split(':')[1];
return path + userId; return path + userId;
} }
downloadPDF(id: string) { downloadPDF(id: string) {
this.datasetService.downloadPDF(id) this.datasetService.downloadPDF(id)
@ -342,15 +357,16 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
}); });
} }
downloadJson(id: string) { //GK: NO
this.datasetService.downloadJson(id) // downloadJson(id: string) {
.pipe(takeUntil(this._destroyed)) // this.datasetService.downloadJson(id)
.subscribe(response => { // .pipe(takeUntil(this._destroyed))
const blob = new Blob([response.body], { type: 'application/json' }); // .subscribe(response => {
const filename = this.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition')); // const blob = new Blob([response.body], { type: 'application/json' });
FileSaver.saveAs(blob, filename); // const filename = this.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition'));
}) // FileSaver.saveAs(blob, filename);
} // })
// }
getFilenameFromContentDispositionHeader(header: string): string { getFilenameFromContentDispositionHeader(header: string): string {
const regex: RegExp = new RegExp(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/g); const regex: RegExp = new RegExp(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/g);
@ -378,7 +394,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
data: { data: {
formControl: formControl, formControl: formControl,
datasetId: this.dataset.id, datasetId: this.dataset.id,
datasetProfileId: this.datasetWizardModel.profile, datasetProfileId: this.datasetWizardEditorModel.profile,
datasetProfileExist: false, datasetProfileExist: false,
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'), confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL') cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
@ -398,10 +414,9 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
return this.dmpService.updateUsers(this.dataset.dmp.id, this.users).pipe(takeUntil(this._destroyed)) return this.dmpService.updateUsers(this.dataset.dmp.id, this.users).pipe(takeUntil(this._destroyed))
.subscribe( .subscribe(
complete => { complete => {
this.onCallbackSuccess(); this.onUpdateCallbackSuccess();
this.reloadPage();
}, },
error => this.onDeleteCallbackError(error) error => this.onUpdateCallbackError(error)
); );
} }
@ -418,12 +433,63 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
if (result) { if (result) {
const index = this.users.findIndex(x => x.id === user.id); const index = this.users.findIndex(x => x.id === user.id);
if (index > -1) { if (index > -1) {
this.users.splice(index, 1); this.users.splice(index, 1);
} }
this.updateUsers(); this.updateUsers();
} }
}); });
} }
showPublishButton(dataset: DatasetOverviewModel) {
return this.isFinalizedDataset(dataset) && !dataset.public && this.hasPublishButton;
}
publish(id: String) {
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
maxWidth: '500px',
restoreFocus: false,
data: {
message: this.language.instant('GENERAL.CONFIRMATION-DIALOG.PUBLISH-ITEM'),
privacyPolicyNames: this.language.instant('GENERAL.CONFIRMATION-DIALOG.PRIVACY-POLICY-NAMES'),
confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'),
cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL'),
isDeleteConfirmation: false
}
});
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
if (result) {
this.datasetService.publish(id)
.pipe(takeUntil(this._destroyed))
.subscribe(() => {
this.hasPublishButton = false;
this.reloadPage();
});
}
});
}
finalize(dataset: DatasetOverviewModel) {
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
restoreFocus: false,
data: {
message: this.language.instant('GENERAL.CONFIRMATION-DIALOG.FINALIZE-ITEM'),
confirmButton: this.language.instant('QUICKWIZARD.SAVE-DIALOG.ACTIONS.AFFIRMATIVE'),
cancelButton: this.language.instant('QUICKWIZARD.SAVE-DIALOG.ACTIONS.NEGATIVE'),
isDeleteConfirmation: false
}
});
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
if (result) {
this.getDatasetWizardModel(this.dataset.id);
this.datasetWizardModel.status = DatasetStatus.Finalized;
this.datasetWizardService.createDataset(this.datasetWizardModel)
.pipe(takeUntil(this._destroyed))
.subscribe(
data => this.onUpdateCallbackSuccess(),
error => this.onUpdateCallbackError(error)
);
}
});
}
} }

View File

@ -54,7 +54,7 @@
<button *ngIf="isDraftDmp(dmp) && isUserOwner && !lockStatus" (click)="editClicked(dmp)" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above"> <button *ngIf="isDraftDmp(dmp) && isUserOwner && !lockStatus" (click)="editClicked(dmp)" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">create</mat-icon> <mat-icon class="mat-mini-fab-icon">create</mat-icon>
</button> </button>
<button *ngIf="isDraftDmp(dmp) && isUserOwner && !lockStatus" (click)="deleteClicked()" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" matTooltipPosition="above"> <button *ngIf="isUserOwner && !lockStatus" (click)="deleteClicked()" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">delete</mat-icon> <mat-icon class="mat-mini-fab-icon">delete</mat-icon>
</button> </button>
</div> </div>
@ -132,7 +132,7 @@
<hr class="hr-line"> <hr class="hr-line">
</div> </div>
</div> </div>
<div *ngIf="hasDoi(dmp) && isFinalizedDmp(dmp) && !this.isPublicView && isUserOwner" (click)="getDoi(dmp)" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center"> <div *ngIf="isFinalizedDmp(dmp) && !this.isPublicView && isUserOwner" (click)="getDoi(dmp)" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center">
<button mat-mini-fab class="frame-btn"> <button mat-mini-fab class="frame-btn">
<mat-icon class="mat-mini-fab-icon">archive</mat-icon> <mat-icon class="mat-mini-fab-icon">archive</mat-icon>
</button> </button>
@ -145,7 +145,7 @@
<p class="mb-0 mr-0 pl-2 frame-txt" [matMenuTriggerFor]="exportMenu"> <p class="mb-0 mr-0 pl-2 frame-txt" [matMenuTriggerFor]="exportMenu">
{{ 'DMP-LISTING.ACTIONS.EXPORT' | translate }}</p> {{ 'DMP-LISTING.ACTIONS.EXPORT' | translate }}</p>
</div> </div>
<div class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center" *ngIf="isUserOwner && !lockStatus" (click)="newVersion(dmp.id, dmp.label)"> <div *ngIf="isUserOwner" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center" (click)="newVersion(dmp.id, dmp.label)">
<button mat-mini-fab class="frame-btn"> <button mat-mini-fab class="frame-btn">
<mat-icon class="mat-mini-fab-icon">add_to_photos</mat-icon> <mat-icon class="mat-mini-fab-icon">add_to_photos</mat-icon>
</button> </button>

View File

@ -30,14 +30,6 @@
// ********BUTTONS******** // ********BUTTONS********
.version-btn {
// width: 6.7em;
height: 1.8em;
border: 1px solid #707070;
border-radius: 4px;
background-color: transparent;
}
.id-btn { .id-btn {
background: url("../../../../assets/images/NoPath.png") no-repeat center; background: url("../../../../assets/images/NoPath.png") no-repeat center;
width: 1em; width: 1em;
@ -194,7 +186,7 @@
} }
.doi-txt { .doi-txt {
font-size: 0.8em; font-size: 1em;
letter-spacing: 0.009em; letter-spacing: 0.009em;
color: #7d7d7d; color: #7d7d7d;
width: 12em; width: 12em;
@ -202,6 +194,7 @@
overflow: hidden; overflow: hidden;
border: none; border: none;
padding: 0px; padding: 0px;
background-color: transparent;
} }
.doi-panel { .doi-panel {
@ -303,6 +296,17 @@
::ng-deep .versions-select .mat-form-field-wrapper { ::ng-deep .versions-select .mat-form-field-wrapper {
background-color: transparent !important; background-color: transparent !important;
padding-bottom: 0 !important; padding-bottom: 0 !important;
width: 6.5rem;
}
::ng-deep .versions-select .mat-form-field-wrapper .mat-form-field-flex {
padding: 0 0.5rem 0 0.625rem;
margin-bottom: 0.2rem;
font-weight: 500;
}
::ng-deep mat-select .mat-select-arrow-wrapper {
vertical-align: bottom;
} }
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix { ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {

View File

@ -478,7 +478,10 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
if (result) { if (result) {
this.dmpService.publish(dmpId) this.dmpService.publish(dmpId)
.pipe(takeUntil(this._destroyed)) .pipe(takeUntil(this._destroyed))
.subscribe(() => { this.hasPublishButton = false }); .subscribe(() => {
this.hasPublishButton = false;
this.reloadPage();
});
} }
}); });
} }

View File

@ -3,8 +3,8 @@
<div class="dropdown-options"> <div class="dropdown-options">
<mat-divider class="col-12 top-divider"></mat-divider> <mat-divider class="col-12 top-divider"></mat-divider>
<div class="col-12 pl-2"> <div class="col-12 pl-2">
<a mat-button class="profile mt-2 mb-2 pl-0"> <a class="profile email-btn mt-2 mb-2 pl-0">
<mat-icon class="check-icon">check</mat-icon>{{ data.user.email }} <mat-icon class="check-icon">check</mat-icon>{{ getPrincipalEmail() }}
</a> </a>
</div> </div>
<mat-divider class="col-12"></mat-divider> <mat-divider class="col-12"></mat-divider>

View File

@ -19,6 +19,13 @@ $mat-card-header-size: 40px !default;
text-align: left; text-align: left;
} }
.email-btn {
cursor: auto;
display: inline-block;
line-height: 2.25rem;
font-size: 0.875rem;
}
.dropdown-top { .dropdown-top {
width: 0rem; width: 0rem;
border-bottom: 0.625rem solid #FFFFFF; border-bottom: 0.625rem solid #FFFFFF;

View File

@ -35,6 +35,12 @@ export class UserDialogComponent implements OnInit {
return ''; return '';
} }
public getPrincipalEmail(): string {
const principal: Principal = this.authentication.current();
if (principal) { return principal.email; }
return '';
}
public principalHasAvatar(): boolean { public principalHasAvatar(): boolean {
return this.authentication.current() && this.authentication.current().avatarUrl != null && this.authentication.current().avatarUrl.length > 0; return this.authentication.current() && this.authentication.current().avatarUrl != null && this.authentication.current().avatarUrl.length > 0;
} }

View File

@ -73,7 +73,6 @@ export class NavbarComponent extends BaseComponent implements OnInit {
this.progressIndicationService.getProgressIndicationObservable().pipe(takeUntil(this._destroyed)).subscribe(x => { this.progressIndicationService.getProgressIndicationObservable().pipe(takeUntil(this._destroyed)).subscribe(x => {
setTimeout(() => { this.progressIndication = x; }); setTimeout(() => { this.progressIndication = x; });
}); });
this.getPrincipalAsUser();
} }
public isAuthenticated(): boolean { public isAuthenticated(): boolean {
@ -84,13 +83,6 @@ export class NavbarComponent extends BaseComponent implements OnInit {
return this.currentRoute === '/language-editor' || this.currentRoute === '/profile'; return this.currentRoute === '/language-editor' || this.currentRoute === '/profile';
} }
public getPrincipalAsUser() {
const principal: Principal = this.authentication.current();
if (principal) {
this.userService.getUser(principal.id).pipe(takeUntil(this._destroyed)).subscribe(result => this.user = result);
}
}
sidebarOpen() { sidebarOpen() {
const toggleButton = this.toggleButton; const toggleButton = this.toggleButton;
const body = document.getElementsByTagName('body')[0]; const body = document.getElementsByTagName('body')[0];
@ -223,9 +215,6 @@ export class NavbarComponent extends BaseComponent implements OnInit {
autoFocus: false, autoFocus: false,
closeOnNavigation: true, closeOnNavigation: true,
disableClose: false, disableClose: false,
data: {
user: this.user
},
position: { top: '64px', right: '1em' } position: { top: '64px', right: '1em' }
}); });
} }

View File

@ -0,0 +1,21 @@
h1 {
text-align: center;
margin: 2rem 0 1rem 0;
}
h4 {
margin: 1rem 0rem 0.5rem 0rem;
}
img {
height: 150px;
width: 100%;
}
.terms-component {
margin-top: 80px;
}
p {
margin: 0.5rem 0rem;
}

View File

@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-opensource-licences',
templateUrl: './opensource-licences.component.html',
styleUrls: ['./opensource-licences.component.scss']
})
export class OpensourceLicencesComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}

View File

@ -0,0 +1,16 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { OpensourceLicencesComponent } from './opensource-licences.component';
const routes: Routes = [
{
path: '',
component: OpensourceLicencesComponent,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class OpensourceLicencesRoutingModule { }

View File

@ -0,0 +1,15 @@
import { NgModule } from '@angular/core';
import { CommonUiModule } from '@common/ui/common-ui.module';
import { OpensourceLicencesRoutingModule } from './opensource-licences.routing';
import { OpensourceLicencesComponent } from './opensource-licences.component';
@NgModule({
imports: [
CommonUiModule,
OpensourceLicencesRoutingModule
],
declarations: [
OpensourceLicencesComponent
],
})
export class OpensourceLicencesModule { }

View File

@ -1,5 +1,6 @@
h1 { h1 {
text-align: center; text-align: center;
margin: 2rem 0 1rem 0;
} }
img { img {

View File

@ -6,7 +6,7 @@
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div class="row profile-card-center-row"> <div class="row profile-card-center-row">
<div class="col-auto"><img mat-card-avatar [src]="userProfile.additionalinfo.avatarUrl" (error)="applyFallbackAvatar($event)"> <div class="col-auto"><img mat-card-avatar [src]="userProfile.avatarUrl" (error)="applyFallbackAvatar($event)">
</div> </div>
</div> </div>
<div class="row profile-card-center-row"> <div class="row profile-card-center-row">

View File

@ -33,7 +33,7 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
editMode = false; editMode = false;
languages = availableLanguages; languages = availableLanguages;
zenodoToken: string; zenodoToken: string;
zenodoEmail: string; zenodoEmail: String;
formGroup: FormGroup; formGroup: FormGroup;
constructor( constructor(
@ -56,13 +56,13 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
this.currentUserId = this.authService.current().id; this.currentUserId = this.authService.current().id;
const userId = !params['id'] ? 'me' : params['id']; const userId = !params['id'] ? 'me' : params['id'];
this.user = this.userService.getUser(userId).pipe(map(result => { this.user = this.userService.getUser(userId).pipe(map(result => {
result['additionalinfo'] = JSON.parse(result['additionalinfo']); //result['additionalinfo'] = JSON.parse(result['additionalinfo']);
this.zenodoToken = result['additionalinfo']['zenodoToken']; //this.zenodoToken = result['additionalinfo']['zenodoToken'];
this.zenodoEmail = result['additionalinfo']['zenodoEmail']; this.zenodoEmail = result['zenodoEmail'];
this.formGroup = new FormBuilder().group({ this.formGroup = new FormBuilder().group({
language: new FormControl(result['additionalinfo']['language'] ? availableLanguages.filter(x => x.value === result['additionalinfo']['language']['value']).pop() : '', [Validators.required]), language: new FormControl(result['language'] ? availableLanguages.filter(x => x.value === result['language']['value']).pop() : '', [Validators.required]),
timezone: new FormControl(result['additionalinfo']['timezone'], [Validators.required]), timezone: new FormControl(result['timezone'], [Validators.required]),
culture: new FormControl(result['additionalinfo']['culture'], [Validators.required]) culture: new FormControl(result['culture'], [Validators.required])
}); });
//this.formGroup.get('language').valueChanges.pipe(takeUntil(this._destroyed)).subscribe(x => { if (x) this.translate.use(x.value) }) //this.formGroup.get('language').valueChanges.pipe(takeUntil(this._destroyed)).subscribe(x => { if (x) this.translate.use(x.value) })
this.formGroup.get('timezone').valueChanges this.formGroup.get('timezone').valueChanges
@ -157,7 +157,7 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
} }
public hasZenodo(): boolean { public hasZenodo(): boolean {
return !isNullOrUndefined(this.zenodoToken) && this.zenodoToken !== ""; return !isNullOrUndefined(this.zenodoEmail) && this.zenodoEmail !== "";
} }
public loginToZenodo() { public loginToZenodo() {

View File

@ -89,6 +89,7 @@
"GENERAL": "Data Management Plans Creator", "GENERAL": "Data Management Plans Creator",
"ABOUT": "About", "ABOUT": "About",
"PRIVACY": "Privacy Policy", "PRIVACY": "Privacy Policy",
"OPENSOURCE-LICENCES": "Opensource Licences",
"TERMS": "Terms Of Service", "TERMS": "Terms Of Service",
"COOKIES-POLICY": "Cookies Policy", "COOKIES-POLICY": "Cookies Policy",
"PLANS": "My DMPs", "PLANS": "My DMPs",
@ -1193,6 +1194,10 @@
"TITLE": "-Privacy Policy-", "TITLE": "-Privacy Policy-",
"MAIN-CONTENT": "" "MAIN-CONTENT": ""
}, },
"OPENSOURCE-LICENCES": {
"TITLE": "Opensource licences",
"MAIN-CONTENT": ""
},
"TERMS-OF-SERVICE": { "TERMS-OF-SERVICE": {
"TITLE": "Terms of Service", "TITLE": "Terms of Service",
"MAIN-CONTENT": "" "MAIN-CONTENT": ""

View File

@ -88,6 +88,7 @@
"GENERAL": "Crear Planes de Gestión de Datos", "GENERAL": "Crear Planes de Gestión de Datos",
"ABOUT": "Acerca de", "ABOUT": "Acerca de",
"PRIVACY": "Política de privacidad", "PRIVACY": "Política de privacidad",
"OPENSOURCE-LICENCES": "Opensource Licences",
"TERMS": "Términos de servicio", "TERMS": "Términos de servicio",
"COOKIES-POLICY": "Cookies Policy", "COOKIES-POLICY": "Cookies Policy",
"PLANS": "Mis PGDs", "PLANS": "Mis PGDs",
@ -1173,6 +1174,10 @@
"TITLE": "-Política de privacidad-", "TITLE": "-Política de privacidad-",
"MAIN-CONTENT": "" "MAIN-CONTENT": ""
}, },
"OPENSOURCE-LICENCES": {
"TITLE": "Opensource licences",
"MAIN-CONTENT": ""
},
"TERMS-OF-SERVICE": { "TERMS-OF-SERVICE": {
"TITLE": "-Términos del servicio-", "TITLE": "-Términos del servicio-",
"MAIN-CONTENT": "" "MAIN-CONTENT": ""

View File

@ -88,6 +88,7 @@
"GENERAL": "Δημιουργός Σχεδίου Διαχείρισης Δεδομένων", "GENERAL": "Δημιουργός Σχεδίου Διαχείρισης Δεδομένων",
"ABOUT": "Σχετικά", "ABOUT": "Σχετικά",
"PRIVACY": "Πολιτική Απορρήτου και Προστασίας Προσωπικών Δεδομένων", "PRIVACY": "Πολιτική Απορρήτου και Προστασίας Προσωπικών Δεδομένων",
"OPENSOURCE-LICENCES": "Opensource Licences",
"TERMS": "Όροι χρήσης", "TERMS": "Όροι χρήσης",
"COOKIES-POLICY": "Cookies Policy", "COOKIES-POLICY": "Cookies Policy",
"PLANS": "Τα Σχέδια Διαχείρισης Δεδομένων Μου", "PLANS": "Τα Σχέδια Διαχείρισης Δεδομένων Μου",
@ -1174,6 +1175,10 @@
"TITLE": "-Πολιτική Απορρήτου-", "TITLE": "-Πολιτική Απορρήτου-",
"MAIN-CONTENT": "" "MAIN-CONTENT": ""
}, },
"OPENSOURCE-LICENCES": {
"TITLE": "Opensource licences",
"MAIN-CONTENT": ""
},
"TERMS-OF-SERVICE": { "TERMS-OF-SERVICE": {
"TITLE": "-Όροι Χρήσης-", "TITLE": "-Όροι Χρήσης-",
"MAIN-CONTENT": "" "MAIN-CONTENT": ""

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Argos</title>
<link rel="icon" type="image/x-icon" href="../assets/img/fav-icon.png">
<!-- Font Awesome icons (free version)-->
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
<!-- Google fonts-->
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
<!-- Core theme CSS -->
<link href="../css/styles.css" rel="stylesheet">
<link href="../css/navbar.css" rel="stylesheet">
<link href="../css/footer.css" rel="stylesheet">
<link href="../css/section.css" rel="stylesheet">
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body id="page-top" class="bootstrap-overrides">
<!-- Navbar -->
<nav class="navbar navbar-expand-lg" id="nav">
<div class="container">
<a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a>
<button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i class="fas fa-bars ml-1"></i></button>
<div class="navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ml-auto">
<li class="nav-item">
<a class="nav-link dropbtn active-nav-link" href="#about">ABOUT</a>
<div id="aboutDropdown" class="dropdown-content">
<div class="dropdown-top"></div>
<div class="dropdown-options">
<a href="how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="faqs.html">faqs</a>
<a href="contributors.html">Contributors</a>
</div>
</div>
</li>
<li class="nav-item">
<a class="nav-link dropbtn" href="#resources">RESOURCES</a>
<div id="resourcesDropdown" class="dropdown-content">
<div class="dropdown-top"></div>
<div class="dropdown-options">
<a href="../resources/media-kit.html">Media kit</a>
<a href="../resources/user-guide.html">User Guide</a>
<a href="../resources/co-branding.html">Co-branding</a>
</div>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="../contact.html">CONTACT</a></li>
<li class="nav-item"><li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li></li>
</ul>
</div>
</div>
</nav>
<!-- Translators -->
<section class="page-section how-it-works" id="how-it-works">
<div class="container-small">
<div class="col">
<div class="page-title">About</div>
</div>
<div class="col pt-5 pb-3">
<div class="row title-4">Translators</div>
</div>
<div class="card mt-3 flex-row">
<img class="col-4 flag" alt="Flag of Greece" src="../../images/contributors/flag-greece.png">
<div class="col-8 card-body" class="flex-column align-items-center">
<p class="card-text-1">Athena Research & Innovation Center</p>
<p class="card-text-2">Dimitra Aglamisi, Elli Papadopoulou</p>
</div>
</div>
<div class="card flex-row">
<img class="col-4 card-img" alt="Flag of Spain" src="../../images/contributors/NoPath - Copy (7).png">
<div class="col-8 card-body" class="flex-column align-items-center">
<p class="card-text-1">Consorcio Madroño</p>
<p class="card-text-2">Lanko López, Juan Corrales Correyero, Fernando González Ballesteros</p>
</div>
</div>
<div class="card flex-row">
<img class="col-4 card-img" alt="Flag of Turkey" src="../../images/contributors/Image 82.png">
<div class="col-8 card-body" class="flex-column align-items-center">
<p class="card-text-1">Turkish Higher Education Council Research Data and Open Data working group</p>
</div>
</div>
</div>
</section>
<!-- Footer-->
<footer class="footer">
<div class="container">
<div class="row justify-content-center">
<div class="col-auto">
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
</div>
<div class="col-auto">
<div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541.</div>
</div>
<div class="col-auto">
<a href="https://www.openaire.eu/">
<img src="../assets/img/Logo_Horizontal_white_small.png" width="126" height="30">
</a>
</div>
</div>
<div class="row justify-content-center pt-5">
<div class="col d-flex justify-content-end">
<a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i class="fab fa-lg fa-facebook-f"></i></a>
<a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i class="fab fa-lg fa-twitter"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1" href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a>
<a class="btn rounded-circle btn-social youtube mx-1" href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i class="fab fa-lg fa-youtube"></i></a>
</div>
<div class="col">
<a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a>
</div>
</div>
<div class="row justify-content-center pt-5">
<a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div>
<div class="row justify-content-center pt-5">
<div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div>
</div>
</div>
</footer>
<!-- Core theme JS-->
<script src="../js/scripts.js"></script>
<!-- Bootstrap -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -36,6 +36,7 @@
<a href="how-it-works.html">How it works</a> <a href="how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="faqs.html">faqs</a> <a href="faqs.html">faqs</a>
<a href="contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -62,10 +63,10 @@
<section class="page-section how-it-works" id="how-it-works"> <section class="page-section how-it-works" id="how-it-works">
<div class="container-small"> <div class="container-small">
<div class="col"> <div class="col">
<div class="page-title">FAQs</div> <div class="page-title">About</div>
</div> </div>
<div class="col pt-5 pb-3"> <div class="col pt-5 pb-3">
<div class="row title-1">FAQs</div> <div class="row title-4">FAQs</div>
</div> </div>
<div class="collapse-box"> <div class="collapse-box">
<div class="panel-heading"> <div class="panel-heading">
@ -167,7 +168,7 @@
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541.</div> Research and Innovation programme under Grant Agreement No. 777541.</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -188,15 +189,16 @@
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -35,6 +35,7 @@
<a href="how-it-works.html">How it works</a> <a href="how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="faqs.html">faqs</a> <a href="faqs.html">faqs</a>
<a href="contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -59,12 +60,12 @@
<section class="page-section how-it-works" id="how-it-works"> <section class="page-section how-it-works" id="how-it-works">
<div class="container-small"> <div class="container-small">
<div class="col"> <div class="col">
<div class="page-title">How it works</div> <div class="page-title">About</div>
</div> </div>
<div class="col pt-5 pb-2"> <div class="col pt-5 pb-3">
<div class="row title-1">How it works</div> <div class="row title-4">How it works</div>
</div> </div>
<p class="pt-2"> <p class="pt-3">
ARGOS is the joint effort of OpenAIRE and EUDAT to deliver an open platform for Data Management Planning ARGOS is the joint effort of OpenAIRE and EUDAT to deliver an open platform for Data Management Planning
that addresses FAIR and Open best practices and assumes no barriers for its use and adoption. that addresses FAIR and Open best practices and assumes no barriers for its use and adoption.
</p> </p>
@ -121,7 +122,7 @@
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541.</div> Research and Innovation programme under Grant Agreement No. 777541.</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -142,15 +143,16 @@
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -36,6 +36,7 @@
<a href="about/how-it-works.html">How it works</a> <a href="about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="about/faqs.html">faqs</a> <a href="about/faqs.html">faqs</a>
<a href="about/contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -67,7 +68,7 @@
<div class="col page-subtitle"> <div class="col page-subtitle">
<div>Contact us to learn more</div> <div>Contact us to learn more</div>
</div> </div>
<div class="col required"> <div class="col required mb-5">
<div>* Required fields</div> <div>* Required fields</div>
</div> </div>
@ -104,7 +105,7 @@
<img src="assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541..</div> Research and Innovation programme under Grant Agreement No. 777541..</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -124,15 +125,16 @@
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -41,7 +41,7 @@
.conditions-policy { .conditions-policy {
text-align: left; text-align: left;
text-decoration: underline; text-decoration: underline !important;
font-weight: 400; font-weight: 400;
font-family: 'Roboto',sans-serif; font-family: 'Roboto',sans-serif;
font-size: 1rem; font-size: 1rem;

View File

@ -124,6 +124,7 @@ section.benefits {
box-shadow: 0px 6px 15px #0000001A; box-shadow: 0px 6px 15px #0000001A;
border-radius: 36px; border-radius: 36px;
opacity: 1; opacity: 1;
margin-bottom: 0.5rem;
} }
.benefit-card-title { .benefit-card-title {
@ -216,6 +217,12 @@ section.benefits {
padding: 2rem 0rem; padding: 2rem 0rem;
} }
.list {
font-size: 0.87rem;
color: #212121;
opacity: 0.8;
}
section.media-kit-logo { section.media-kit-logo {
background: #F3F3F3; background: #F3F3F3;
opacity: 1; opacity: 1;

View File

@ -130,30 +130,30 @@ p a {
} }
.title-1 { .title-1 {
text-align: left;
font-size: 2.37rem;
line-height: 2.75rem; line-height: 2.75rem;
font-family: 'Roboto', sans-serif;
font-weight: 300; font-weight: 300;
color: #FFFFFF; color: #FFFFFF;
} }
.title-2 { .title-2 {
text-align: left;
font-size: 2.37rem;
line-height: 2.75rem; line-height: 2.75rem;
font-family: 'Roboto', sans-serif;
font-weight: 700; font-weight: 700;
color: #FFFFFF; color: #FFFFFF;
} }
.title-3 { .title-3 {
opacity: 0.95;
}
.title-3, .title-4 {
font-weight: 300;
color: #212121;
}
.title-1, .title-2, .title-3, .title-4 {
text-align: left; text-align: left;
font-size: 2.37rem; font-size: 2.37rem;
font-family: 'Roboto', sans-serif; font-family: 'Roboto', sans-serif;
font-weight: 300;
color: #212121;
opacity: 0.95;
} }
.page-title { .page-title {
@ -323,3 +323,41 @@ hr {
max-width: 900px; max-width: 900px;
} }
} }
.card {
min-height: 14rem;
margin-bottom: 1.875rem;
box-shadow: 0px 3px 6px #00000029;
}
.card-img {
transform: scale(0.5);
}
.card-body {
display: flex;
flex-direction: column;
align-items: left;
justify-content: center;
padding: 1rem 1.25rem !important;
}
.card-text-1 {
font-size: 1.125rem;
font-weight: bold;
text-transform: uppercase;
}
.card-text-2 {
font-size: 1rem;
font-weight: 400;
opacity: 0.6;
}
.flag {
border: 10px solid #EEEEEE;
border-radius: 50% !important;
padding-right: 0px !important;
padding-left: 0px !important;
transform: scale(0.45);
}

View File

@ -36,6 +36,7 @@
<a href="about/how-it-works.html">How it works</a> <a href="about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="about/faqs.html">faqs</a> <a href="about/faqs.html">faqs</a>
<a href="about/contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -350,7 +351,7 @@
<img src="assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541.</div> Research and Innovation programme under Grant Agreement No. 777541.</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -371,15 +372,16 @@
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">CC ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -9,14 +9,17 @@
<!-- Font Awesome icons (free version)--> <!-- Font Awesome icons (free version)-->
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script> <script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
<!-- Google fonts--> <!-- Google fonts-->
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet"> <link
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
rel="stylesheet">
<!-- Core theme CSS --> <!-- Core theme CSS -->
<link href="../css/styles.css" rel="stylesheet"> <link href="../css/styles.css" rel="stylesheet">
<link href="../css/navbar.css" rel="stylesheet"> <link href="../css/navbar.css" rel="stylesheet">
<link href="../css/footer.css" rel="stylesheet"> <link href="../css/footer.css" rel="stylesheet">
<link href="../css/section.css" rel="stylesheet"> <link href="../css/section.css" rel="stylesheet">
<!-- Bootstrap --> <!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head> </head>
<body id="page-top" class="bootstrap-overrides"> <body id="page-top" class="bootstrap-overrides">
@ -24,7 +27,9 @@
<nav class="navbar navbar-expand-lg" id="nav"> <nav class="navbar navbar-expand-lg" id="nav">
<div class="container"> <div class="container">
<a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a> <a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a>
<button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i class="fas fa-bars ml-1"></i></button> <button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive"
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i
class="fas fa-bars ml-1"></i></button>
<div class="navbar-collapse" id="navbarResponsive"> <div class="navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ml-auto"> <ul class="navbar-nav text-uppercase ml-auto">
<li class="nav-item"> <li class="nav-item">
@ -35,6 +40,7 @@
<a href="../about/how-it-works.html">How it works</a> <a href="../about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="../about/faqs.html">faqs</a> <a href="../about/faqs.html">faqs</a>
<a href="../about/contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -50,7 +56,9 @@
</div> </div>
</li> </li>
<li class="nav-item"><a class="nav-link" href="../contact.html">CONTACT</a></li> <li class="nav-item"><a class="nav-link" href="../contact.html">CONTACT</a></li>
<li class="nav-item"><li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li></li> <li class="nav-item">
<li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li>
</li>
</ul> </ul>
</div> </div>
</div> </div>
@ -65,12 +73,17 @@
<div class="title-3">Download ARGOS</div> <div class="title-3">Download ARGOS</div>
</div> </div>
<div class="col"> <div class="col">
<p> <p>Open to all to suggest new features and to actively contribute to Argos development via pull
<div>Open to all to suggest new features and to actively contribute to Argos development via pull requests of code in <a href="https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot">GitLab</a>!</div> requests of code in
<div>Note that this page is under development.</div> <a href="https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot">GitLab</a>!
<br>Note that this page is under development.
</p> </p>
</div> </div>
<div class="col d-flex justify-content-center"><a href="https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot"><button class="normal-btn">Download argos</button></a></div> <div class="col d-flex justify-content-center mt-5 pt-5 mb-5 pb-5">
<a href="https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot">
<button class="normal-btn">Download argos</button>
</a>
</div>
</div> </div>
</section> </section>
<!-- Footer--> <!-- Footer-->
@ -81,7 +94,7 @@
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541.</div> Research and Innovation programme under Grant Agreement No. 777541.</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -92,34 +105,48 @@
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col d-flex justify-content-end"> <div class="col d-flex justify-content-end">
<a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i class="fab fa-lg fa-facebook-f"></i></a> <a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i
<a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i class="fab fa-lg fa-twitter"></i></a> class="fab fa-lg fa-facebook-f"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1" href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a> <a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i
<a class="btn rounded-circle btn-social youtube mx-1" href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i class="fab fa-lg fa-youtube"></i></a> class="fab fa-lg fa-twitter"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1"
href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a>
<a class="btn rounded-circle btn-social youtube mx-1"
href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i
class="fab fa-lg fa-youtube"></i></a>
</div> </div>
<div class="col"> <div class="col">
<a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a> <a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span
class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a>
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0
INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
<!-- Core theme JS--> <!-- Core theme JS-->
<script src="../js/scripts.js"></script> <script src="../js/scripts.js"></script>
<!-- Bootstrap --> <!-- Bootstrap -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View File

@ -9,14 +9,17 @@
<!-- Font Awesome icons (free version)--> <!-- Font Awesome icons (free version)-->
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script> <script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
<!-- Google fonts--> <!-- Google fonts-->
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet"> <link
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
rel="stylesheet">
<!-- Core theme CSS --> <!-- Core theme CSS -->
<link href="../css/styles.css" rel="stylesheet"> <link href="../css/styles.css" rel="stylesheet">
<link href="../css/navbar.css" rel="stylesheet"> <link href="../css/navbar.css" rel="stylesheet">
<link href="../css/footer.css" rel="stylesheet"> <link href="../css/footer.css" rel="stylesheet">
<link href="../css/section.css" rel="stylesheet"> <link href="../css/section.css" rel="stylesheet">
<!-- Bootstrap --> <!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head> </head>
<body id="page-top" class="bootstrap-overrides"> <body id="page-top" class="bootstrap-overrides">
@ -24,7 +27,9 @@
<nav class="navbar navbar-expand-lg" id="nav"> <nav class="navbar navbar-expand-lg" id="nav">
<div class="container"> <div class="container">
<a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a> <a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a>
<button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i class="fas fa-bars ml-1"></i></button> <button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive"
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i
class="fas fa-bars ml-1"></i></button>
<div class="navbar-collapse" id="navbarResponsive"> <div class="navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ml-auto"> <ul class="navbar-nav text-uppercase ml-auto">
<li class="nav-item"> <li class="nav-item">
@ -35,6 +40,7 @@
<a href="../about/how-it-works.html">How it works</a> <a href="../about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="../about/faqs.html">faqs</a> <a href="../about/faqs.html">faqs</a>
<a href="../about/contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -50,7 +56,9 @@
</div> </div>
</li> </li>
<li class="nav-item"><a class="nav-link" href="../contact.html">CONTACT</a></li> <li class="nav-item"><a class="nav-link" href="../contact.html">CONTACT</a></li>
<li class="nav-item"><li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li></li> <li class="nav-item">
<li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li>
</li>
</ul> </ul>
</div> </div>
</div> </div>
@ -64,29 +72,35 @@
<div class="col pt-5 pb-3"> <div class="col pt-5 pb-3">
<div class="title-3">Media Kit</div> <div class="title-3">Media Kit</div>
</div> </div>
<div class="col"> <div class="col mb-5">
<p> <p>
This kit has been designed for everyone who wishes to get more familiar with the Argos tool or This kit has been designed for everyone who wishes to get more familiar with the Argos tool or
promote Argos in their area of influence. The media kit includes: promote Argos in their area of influence. The media kit includes:
<ul> </p>
<ul class="list">
<li> <li>
<a href="#media-kit-logo">Argos logo</a> for dark and light backgrounds in two resolutions, including examples of misuse. <a href="#media-kit-logo">Argos logo</a> for dark and light backgrounds in two resolutions,
including examples of misuse.
Please avoid changing the colors, rotating the icons, moving the icons, adding text, etc. If you Please avoid changing the colors, rotating the icons, moving the icons, adding text, etc. If you
need to make any modifications on the versions of the logo provided in the Media Kit, please reach need to make any modifications on the versions of the logo provided in the Media Kit, please
reach
out to argos@openaire.eu. out to argos@openaire.eu.
</li> </li>
<li> <li>
<a href="#moo-cards">Moo card,</a> a two-sided card capturing the most essential and unique features of Argos in a concise <a href="#moo-cards">Moo card,</a> a two-sided card capturing the most essential and unique
features of Argos in a concise
way. way.
</li> </li>
<li> <li>
<a href="../assets/media-kit/Factsheet.pdf">Factsheet</a> containing the basics of Argos and explaining its key features in an adequate level of <a href="../assets/media-kit/Factsheet.pdf">Factsheet</a> containing the basics of Argos and
explaining its key features in an adequate level of
</li> </li>
<li> <li>
<a href="https://www.openaire.eu/argos/">Useful Resources,</a> a collection of resources either directly for Argos or indirectly for Research Data Management issues which to some extent relate to Argos. <a href="https://www.openaire.eu/argos/">Useful Resources,</a> a collection of resources either
directly for Argos or indirectly for Research Data Management issues which to some extent relate
to Argos.
</li> </li>
</ul> </ul>
</p>
</div> </div>
</div> </div>
</section> </section>
@ -98,36 +112,46 @@
<div class="col-auto"> <div class="col-auto">
<img src="../assets/img/logo-1.png" width="570" height="283"> <img src="../assets/img/logo-1.png" width="570" height="283">
<div class="row pr-4"> <div class="row pr-4">
<a href="../assets/media-kit/argos-logo.svg"><div class="col-auto ml-auto pt-4"><i class="fas fa-lg fa-download"></i>SVG</a></div> <a href="../assets/media-kit/argos-logo.svg">
<a href="../assets/media-kit/argos-logo.png"><div class="col-auto pt-4"><i class="fas fa-lg fa-download"></i>PNG</a></div> <div class="col-auto ml-auto pt-4"><i class="fas fa-lg fa-download"></i>SVG
</div> </a></div>
</div> <a href="../assets/media-kit/argos-logo.png">
<div class="col-auto"> <div class="col-auto pt-4"><i class="fas fa-lg fa-download"></i>PNG
<img src="../assets/img/logo-2.png" width="570" height="283"> </a>
<div class="row pr-4">
<a href="../assets/media-kit/argos-logo-white.svg"><div class="col-auto ml-auto pt-4"><i class="fas fa-lg fa-download"></i>SVG</a></div>
<a href="../assets/media-kit/argos-logo-white.png"><div class="col-auto pt-4"><i class="fas fa-lg fa-download"></i>PNG</a></div>
</div>
</div> </div>
</div> </div>
<div class="row media-kit-logo-title pt-5">Logo Usage Crimes</div> </div>
<div class="row d-flex justify-content-center pt-5"> <div class="col-auto">
<div class="col-auto"> <img src="../assets/img/logo-2.png" width="570" height="283">
<img src="../assets/img/logo-wrong-use-1.jpg" width="288" height="122"> <div class="row pr-4">
<div class="col-auto d-flex justify-content-center pt-4"><i class="far fa-lg fa-times-circle"></i> <a href="../assets/media-kit/argos-logo-white.svg">
</div> <div class="col-auto ml-auto pt-4"><i class="fas fa-lg fa-download"></i>SVG
</div> </a></div>
<div class="col-auto"> <a href="../assets/media-kit/argos-logo-white.png">
<img src="../assets/img/logo-wrong-use-2.jpg" width="288" height="122"> <div class="col-auto pt-4"><i class="fas fa-lg fa-download"></i>PNG
<div class="col-auto d-flex justify-content-center pt-4"><i class="far fa-lg fa-times-circle"></i> </a>
</div> </div>
</div> </div>
<div class="col-auto"> </div>
<img src="../assets/img/logo-wrong-use-3.jpg" width="288" height="122"> </div>
<div class="col-auto d-flex justify-content-center pt-4"><i class="far fa-lg fa-times-circle"></i> <div class="row media-kit-logo-title pt-5">Logo Usage Crimes</div>
</div> <div class="row d-flex justify-content-center pt-5">
<div class="col-auto">
<img src="../assets/img/logo-wrong-use-1.jpg" width="288" height="122">
<div class="col-auto d-flex justify-content-center pt-4"><i class="far fa-lg fa-times-circle"></i>
</div> </div>
</div> </div>
<div class="col-auto">
<img src="../assets/img/logo-wrong-use-2.jpg" width="288" height="122">
<div class="col-auto d-flex justify-content-center pt-4"><i class="far fa-lg fa-times-circle"></i>
</div>
</div>
<div class="col-auto">
<img src="../assets/img/logo-wrong-use-3.jpg" width="288" height="122">
<div class="col-auto d-flex justify-content-center pt-4"><i class="far fa-lg fa-times-circle"></i>
</div>
</div>
</div>
</div> </div>
</section> </section>
<!-- Moo Cards --> <!-- Moo Cards -->
@ -143,8 +167,10 @@
</div> </div>
</div> </div>
<div class="row d-flex justify-content-center"> <div class="row d-flex justify-content-center">
<div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-svg.zip"><i class="fas fa-lg fa-download"></i>SVG</a></div> <div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-svg.zip"><i
<div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-png.zip"><i class="fas fa-lg fa-download"></i>PNG</a></div> class="fas fa-lg fa-download"></i>SVG</a></div>
<div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-png.zip"><i
class="fas fa-lg fa-download"></i>PNG</a></div>
</div> </div>
</div> </div>
</section> </section>
@ -156,7 +182,7 @@
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541.</div> Research and Innovation programme under Grant Agreement No. 777541.</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -167,34 +193,48 @@
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col d-flex justify-content-end"> <div class="col d-flex justify-content-end">
<a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i class="fab fa-lg fa-facebook-f"></i></a> <a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i
<a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i class="fab fa-lg fa-twitter"></i></a> class="fab fa-lg fa-facebook-f"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1" href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a> <a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i
<a class="btn rounded-circle btn-social youtube mx-1" href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i class="fab fa-lg fa-youtube"></i></a> class="fab fa-lg fa-twitter"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1"
href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a>
<a class="btn rounded-circle btn-social youtube mx-1"
href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i
class="fab fa-lg fa-youtube"></i></a>
</div> </div>
<div class="col"> <div class="col">
<a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a> <a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span
class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a>
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0
INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
<!-- Core theme JS--> <!-- Core theme JS-->
<script src="../js/scripts.js"></script> <script src="../js/scripts.js"></script>
<!-- Bootstrap --> <!-- Bootstrap -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View File

@ -9,14 +9,17 @@
<!-- Font Awesome icons (free version)--> <!-- Font Awesome icons (free version)-->
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script> <script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
<!-- Google fonts--> <!-- Google fonts-->
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet"> <link
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
rel="stylesheet">
<!-- Core theme CSS --> <!-- Core theme CSS -->
<link href="../css/styles.css" rel="stylesheet"> <link href="../css/styles.css" rel="stylesheet">
<link href="../css/navbar.css" rel="stylesheet"> <link href="../css/navbar.css" rel="stylesheet">
<link href="../css/footer.css" rel="stylesheet"> <link href="../css/footer.css" rel="stylesheet">
<link href="../css/section.css" rel="stylesheet"> <link href="../css/section.css" rel="stylesheet">
<!-- Bootstrap --> <!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head> </head>
<body id="page-top" class="bootstrap-overrides"> <body id="page-top" class="bootstrap-overrides">
@ -24,7 +27,9 @@
<nav class="navbar navbar-expand-lg" id="nav"> <nav class="navbar navbar-expand-lg" id="nav">
<div class="container"> <div class="container">
<a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a> <a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a>
<button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i class="fas fa-bars ml-1"></i></button> <button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive"
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i
class="fas fa-bars ml-1"></i></button>
<div class="navbar-collapse" id="navbarResponsive"> <div class="navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ml-auto"> <ul class="navbar-nav text-uppercase ml-auto">
<li class="nav-item"> <li class="nav-item">
@ -35,6 +40,7 @@
<a href="../about/how-it-works.html">How it works</a> <a href="../about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a>
<a href="../about/faqs.html">faqs</a> <a href="../about/faqs.html">faqs</a>
<a href="../about/contributors.html">Contributors</a>
</div> </div>
</div> </div>
</li> </li>
@ -68,16 +74,19 @@
</div> </div>
<div class="col"> <div class="col">
<p> <p>
Become proficient in using Argos by following the User Guide. Check presentation for additional hints and leave your thoughts for improvements in the feedback form. Become proficient in using Argos by following the User Guide. Check presentation for additional
<ul> hints and leave your thoughts for improvements in the feedback form.
<li><a href="/user-guide">User Guide</a></li>
<li><a href="../assets/presentations/argos.pdf">Presentations</a></li>
<li><a href="https://docs.google.com/forms/d/1KNhgjQyGrA6lYjOOUUL5cqU2BVquS0qdfwzOGxokgAw">Feedback Form</a></li>
</ul>
</p> </p>
<ul class="list mb-5">
<li><a href="/user-guide">User Guide</a></li>
<li><a href="../assets/presentations/argos.pdf">Presentations</a></li>
<li><a href="https://docs.google.com/forms/d/1KNhgjQyGrA6lYjOOUUL5cqU2BVquS0qdfwzOGxokgAw">Feedback
Form</a></li>
</ul>
</div>
<div class="col d-flex justify-content-center mb-5 pb-5">
<a href="/user-guide"><button class="normal-btn">View User Guide Online</button></a>
</div> </div>
<div class="col d-flex justify-content-center"><a href="/user-guide"><button class="normal-btn">View User Guide
Online</button></a></div>
</div> </div>
</section> </section>
<!-- Footer--> <!-- Footer-->
@ -88,7 +97,7 @@
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37"> <img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="footer-text">OpenAIRE-Advance receives funding from the European Union's Horizon 2020 <div class="footer-text">ARGOS receives funding from the European Union's Horizon 2020
Research and Innovation programme under Grant Agreement No. 777541..</div> Research and Innovation programme under Grant Agreement No. 777541..</div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -99,33 +108,47 @@
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col d-flex justify-content-end"> <div class="col d-flex justify-content-end">
<a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i class="fab fa-lg fa-facebook-f"></i></a> <a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i
<a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i class="fab fa-lg fa-twitter"></i></a> class="fab fa-lg fa-facebook-f"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1" href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a> <a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i
<a class="btn rounded-circle btn-social youtube mx-1" href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i class="fab fa-lg fa-youtube"></i></a> </div> class="fab fa-lg fa-twitter"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1"
href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a>
<a class="btn rounded-circle btn-social youtube mx-1"
href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i
class="fab fa-lg fa-youtube"></i></a> </div>
<div class="col"> <div class="col">
<a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a> <a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span
class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a>
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<a class="col d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a> <a class="col-auto conditions-policy" href="/opensource-licences">Οpensource licences</a>
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a> <a class="col-auto conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
<a class="col-auto conditions-policy" href="/cookies-policy">Cookies policy</a>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div> <div class="col-auto"><img src="../assets/img/Cc.logo.circle.png" width="24" height="24"></div>
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div class="licence"><u><a href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">CC ATTRIBUTION 4.0
INTERNATIONAL LICENSE.</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
<!-- Core theme JS--> <!-- Core theme JS-->
<script src="../js/scripts.js"></script> <script src="../js/scripts.js"></script>
<!-- Bootstrap --> <!-- Bootstrap -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,47 @@
-- Angular
https://github.com/angular/angular/blob/master/LICENSE
-- NGX-Translate
https://github.com/ngx-translate/core/blob/master/LICENSE
-- Swimlane
https://github.com/swimlane/ngx-datatable/blob/master/LICENSE
-- TinyMCE
https://github.com/tinymce/tinymce/blob/develop/LICENSE.TXT
-- W11K GmbH
https://github.com/w11k/angular-sticky-things/blob/master/LICENSE
-- Bootstrap
https://github.com/twbs/bootstrap/blob/main/LICENSE
-- Cookie Consent
https://github.com/osano/cookieconsent/blob/dev/LICENSE
-- Core-js
https://github.com/zloirock/core-js/blob/master/LICENSE
-- File Saver
https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
-- Moment
https://github.com/moment/moment/blob/develop/LICENSE
-- Ngx-Cookie-Service
https://github.com/stevermeister/ngx-cookie-service/blob/master/LICENSE
-- Ngx-cookieconsent
https://github.com/tinesoft/ngx-cookieconsent/blob/master/LICENSE
-- Rxjs
https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt
-- Tslib
https://github.com/microsoft/tslib/blob/master/LICENSE.txt
-- Web-animations-js
https://github.com/web-animations/web-animations-js/blob/dev/COPYING
-- Zone.js
https://github.com/angular/zone.js/blob/master/LICENSE