Merge branch 'ui-redesign' of gitlab.eudat.eu:dmp/OpenAIRE-EUDAT-DMP-service-pilot into ui-redesign
This commit is contained in:
commit
e475b265ab
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -1,45 +1,84 @@
|
|||
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.data.query.items.table.dataset.DatasetPublicTableRequest;
|
||||
import eu.eudat.data.query.items.table.dataset.DatasetTableRequest;
|
||||
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
|
||||
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.dataset.DatasetOverviewModel;
|
||||
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.responses.ResponseItem;
|
||||
import eu.eudat.models.data.listingmodels.DataManagementPlanOverviewModel;
|
||||
import eu.eudat.models.data.listingmodels.DatasetListingModel;
|
||||
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.transaction.annotation.Transactional;
|
||||
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.UUID;
|
||||
|
||||
import static eu.eudat.types.Authorities.ANONYMOUS;
|
||||
|
||||
|
||||
@RestController
|
||||
@CrossOrigin
|
||||
@RequestMapping(value = {"/api/datasets/"})
|
||||
public class Datasets extends BaseController {
|
||||
private static final Logger logger = LoggerFactory.getLogger(Datasets.class);
|
||||
|
||||
private Environment environment;
|
||||
private DatasetManager datasetManager;
|
||||
private ConfigLoader configLoader;
|
||||
private UserManager userManager;
|
||||
|
||||
@Autowired
|
||||
public Datasets(ApiContext apiContext, DatasetManager datasetManager) {
|
||||
public Datasets(ApiContext apiContext, Environment environment, DatasetManager datasetManager, ConfigLoader configLoader, UserManager userManager) {
|
||||
super(apiContext);
|
||||
this.environment = environment;
|
||||
this.datasetManager = datasetManager;
|
||||
this.configLoader = configLoader;
|
||||
this.userManager = userManager;
|
||||
}
|
||||
|
||||
/*
|
||||
* Data Retrieval
|
||||
* */
|
||||
|
||||
@RequestMapping(method = RequestMethod.POST, value = {"paged"}, consumes = "application/json", produces = "application/json")
|
||||
public @ResponseBody
|
||||
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
|
||||
@RequestMapping(method = RequestMethod.GET, value = {"/makepublic/{id}"}, produces = "application/json")
|
||||
@javax.transaction.Transactional
|
||||
@RequestMapping(method = RequestMethod.GET, value = {"{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)));
|
||||
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.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));
|
||||
}
|
||||
|
||||
@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
|
||||
@RequestMapping(method = RequestMethod.POST, value = {"/index"})
|
||||
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));
|
||||
}
|
||||
|
||||
@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"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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.login.Credentials;
|
||||
import eu.eudat.models.data.login.LoginInfo;
|
||||
import eu.eudat.models.data.principal.PrincipalModel;
|
||||
import eu.eudat.models.data.security.Principal;
|
||||
import eu.eudat.types.ApiMessageCode;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -91,17 +92,17 @@ public class Login {
|
|||
@Transactional
|
||||
@RequestMapping(method = RequestMethod.POST, value = {"/externallogin"}, consumes = "application/json", produces = "application/json")
|
||||
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());
|
||||
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
|
||||
@RequestMapping(method = RequestMethod.POST, value = {"/nativelogin"}, consumes = "application/json", produces = "application/json")
|
||||
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");
|
||||
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")
|
||||
|
@ -148,9 +149,11 @@ public class Login {
|
|||
|
||||
@RequestMapping(method = RequestMethod.POST, value = {"/me"}, consumes = "application/json", produces = "application/json")
|
||||
public @ResponseBody
|
||||
ResponseEntity<ResponseItem<Principal>> authMe(Principal principal) throws NullEmailException {
|
||||
ResponseEntity<ResponseItem<PrincipalModel>> authMe(Principal principal) throws NullEmailException {
|
||||
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
|
||||
|
|
|
@ -17,6 +17,7 @@ public class PrincipalBuilder extends Builder<Principal> {
|
|||
private UUID id;
|
||||
private UUID token;
|
||||
private String name;
|
||||
private String email;
|
||||
private Date expiresAt;
|
||||
private String avatarUrl;
|
||||
private Set<Authorities> authorities;
|
||||
|
@ -43,6 +44,11 @@ public class PrincipalBuilder extends Builder<Principal> {
|
|||
return this;
|
||||
}
|
||||
|
||||
public PrincipalBuilder email(String email) {
|
||||
this.email = email;
|
||||
return this;
|
||||
}
|
||||
|
||||
public PrincipalBuilder expiresAt(Date expiresAt) {
|
||||
this.expiresAt = expiresAt;
|
||||
return this;
|
||||
|
@ -98,6 +104,7 @@ public class PrincipalBuilder extends Builder<Principal> {
|
|||
Principal principal = new Principal();
|
||||
principal.setAuthorities(authorities);
|
||||
principal.setName(name);
|
||||
principal.setEmail(email);
|
||||
principal.setExpiresAt(expiresAt);
|
||||
principal.setToken(token);
|
||||
principal.setId(id);
|
||||
|
|
|
@ -24,6 +24,7 @@ import eu.eudat.models.data.dmp.DataManagementPlan;
|
|||
import eu.eudat.models.data.doi.DOIRequest;
|
||||
import eu.eudat.models.data.helpers.common.DataTableData;
|
||||
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.userinfo.UserListingModel;
|
||||
import eu.eudat.models.data.userinfo.UserProfile;
|
||||
|
@ -105,10 +106,11 @@ public class UserManager {
|
|||
.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);
|
||||
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 {
|
||||
|
|
|
@ -4,6 +4,7 @@ import eu.eudat.exceptions.security.NonValidTokenException;
|
|||
import eu.eudat.exceptions.security.NullEmailException;
|
||||
import eu.eudat.exceptions.security.UnauthorisedException;
|
||||
import eu.eudat.models.data.login.LoginInfo;
|
||||
import eu.eudat.models.data.principal.PrincipalModel;
|
||||
import eu.eudat.models.data.security.Principal;
|
||||
import eu.eudat.logic.security.validators.TokenValidatorFactory;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -22,11 +23,11 @@ public class CustomAuthenticationProvider {
|
|||
@Autowired
|
||||
private TokenValidatorFactory tokenValidatorFactory;
|
||||
|
||||
public Principal authenticate(LoginInfo credentials) throws GeneralSecurityException, NullEmailException {
|
||||
public PrincipalModel authenticate(LoginInfo credentials) throws GeneralSecurityException, NullEmailException {
|
||||
String token = credentials.getTicket();
|
||||
try {
|
||||
Principal principal = this.tokenValidatorFactory.getProvider(credentials.getProvider()).validateToken(credentials);
|
||||
return principal;
|
||||
return PrincipalModel.fromEntity(principal);
|
||||
} catch (NonValidTokenException 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");
|
||||
|
|
|
@ -78,7 +78,9 @@ public class NonVerifiedUserEmailAuthenticationService extends AbstractAuthentic
|
|||
}
|
||||
Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class)
|
||||
.id(user.getId()).token(token.getToken())
|
||||
.expiresAt(token.getExpiresAt()).name(user.getName())
|
||||
.expiresAt(token.getExpiresAt())
|
||||
.name(user.getName())
|
||||
.email(user.getEmail())
|
||||
.avatarUrl(avatarUrl)
|
||||
.culture(culture)
|
||||
.language(language)
|
||||
|
|
|
@ -87,7 +87,9 @@ public class VerifiedUserAuthenticationService extends AbstractAuthenticationSer
|
|||
}
|
||||
Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class)
|
||||
.id(user.getId()).token(token.getToken())
|
||||
.expiresAt(token.getExpiresAt()).name(user.getName())
|
||||
.expiresAt(token.getExpiresAt())
|
||||
.name(user.getName())
|
||||
.email(user.getEmail())
|
||||
.avatarUrl(avatarUrl)
|
||||
.culture(culture)
|
||||
.language(language)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ public class Principal {
|
|||
private UUID id;
|
||||
private UUID token;
|
||||
private String name;
|
||||
private String email;
|
||||
private Date expiresAt;
|
||||
private String avatarUrl;
|
||||
private Set<Authorities> authorities;
|
||||
|
@ -47,6 +48,14 @@ public class Principal {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public Date getExpiresAt() {
|
||||
return expiresAt;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ public class UserInfo implements DataModel<eu.eudat.data.entities.UserInfo, User
|
|||
|
||||
private Date lastloggedin = null;
|
||||
|
||||
private String additionalinfo;
|
||||
// private String additionalinfo;
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
|
@ -88,13 +88,13 @@ public class UserInfo implements DataModel<eu.eudat.data.entities.UserInfo, User
|
|||
this.lastloggedin = lastloggedin;
|
||||
}
|
||||
|
||||
public String getAdditionalinfo() {
|
||||
/*public String getAdditionalinfo() {
|
||||
return additionalinfo;
|
||||
}
|
||||
|
||||
public void setAdditionalinfo(String additionalinfo) {
|
||||
this.additionalinfo = additionalinfo;
|
||||
}
|
||||
}*/
|
||||
|
||||
@Override
|
||||
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.setEmail(this.getEmail());
|
||||
entity.setName(this.getName());
|
||||
entity.setAdditionalinfo(this.getAdditionalinfo());
|
||||
//entity.setAdditionalinfo(this.getAdditionalinfo());
|
||||
entity.setAuthorization_level(this.getAuthorization_level());
|
||||
entity.setCreated(this.getCreated());
|
||||
entity.setLastloggedin(this.getLastloggedin());
|
||||
|
|
|
@ -17,7 +17,7 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
|
|||
private String name;
|
||||
private Date created;
|
||||
private Date lastloggedin;
|
||||
private String additionalinfo;
|
||||
//private String additionalinfo;
|
||||
private List<Integer> appRoles;
|
||||
|
||||
public UUID getId() {
|
||||
|
@ -69,12 +69,12 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
|
|||
this.lastloggedin = lastloggedin;
|
||||
}
|
||||
|
||||
public String getAdditionalinfo() {
|
||||
/*public String getAdditionalinfo() {
|
||||
return additionalinfo;
|
||||
}
|
||||
public void setAdditionalinfo(String additionalinfo) {
|
||||
this.additionalinfo = additionalinfo;
|
||||
}
|
||||
}*/
|
||||
|
||||
public List<Integer> getAppRoles() {
|
||||
return appRoles;
|
||||
|
@ -92,7 +92,7 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
|
|||
this.name = entity.getName();
|
||||
this.created = entity.getCreated();
|
||||
this.lastloggedin = entity.getLastloggedin();
|
||||
this.additionalinfo = entity.getAdditionalinfo();
|
||||
// this.additionalinfo = entity.getAdditionalinfo();
|
||||
this.appRoles = entity.getUserRoles().stream().map(item -> item.getRole()).collect(Collectors.toList());
|
||||
return this;
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ public class UserListingModel implements DataModel<eu.eudat.data.entities.UserIn
|
|||
userInfo.setName(this.name);
|
||||
userInfo.setCreated(this.created);
|
||||
userInfo.setLastloggedin(this.lastloggedin);
|
||||
userInfo.setAdditionalinfo(this.additionalinfo);
|
||||
// userInfo.setAdditionalinfo(this.additionalinfo);
|
||||
|
||||
return userInfo;
|
||||
}
|
||||
|
|
|
@ -1,27 +1,37 @@
|
|||
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.UserInfo;
|
||||
import eu.eudat.models.DataModel;
|
||||
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.util.List;
|
||||
import java.util.UUID;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Created by ikalyvas on 8/24/2018.
|
||||
*/
|
||||
public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, UserProfile> {
|
||||
private static final Logger logger = LoggerFactory.getLogger(UserProfile.class);
|
||||
|
||||
private UUID id;
|
||||
private String email;
|
||||
private Short usertype;
|
||||
private String name;
|
||||
private Date lastloggedin;
|
||||
private String additionalinfo;
|
||||
//private String additionalinfo;
|
||||
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() {
|
||||
return id;
|
||||
|
@ -63,13 +73,13 @@ public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, U
|
|||
this.lastloggedin = lastloggedin;
|
||||
}
|
||||
|
||||
public String getAdditionalinfo() {
|
||||
/*public String getAdditionalinfo() {
|
||||
return additionalinfo;
|
||||
}
|
||||
|
||||
public void setAdditionalinfo(String additionalinfo) {
|
||||
this.additionalinfo = additionalinfo;
|
||||
}
|
||||
}*/
|
||||
|
||||
public List<DataManagementPlan> getAssociatedDmps() {
|
||||
return associatedDmps;
|
||||
|
@ -79,6 +89,46 @@ public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, U
|
|||
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
|
||||
public UserProfile fromDataModel(UserInfo entity) {
|
||||
this.id = entity.getId();
|
||||
|
@ -86,7 +136,17 @@ public class UserProfile implements DataModel<eu.eudat.data.entities.UserInfo, U
|
|||
this.usertype = entity.getUsertype();
|
||||
this.name = entity.getName();
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ http-logger.server-address = http://localhost:31311
|
|||
pdf.converter.url=http://localhost:88/
|
||||
|
||||
####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS##########
|
||||
configuration.externalUrls=ExternalUrls.xml
|
||||
configuration.externalUrls=externalUrls/ExternalUrls.xml
|
||||
configuration.rda=RDACommonStandards.txt
|
||||
configuration.h2020template=documents/h2020.docx
|
||||
configuration.configurable_login_providers=configurableLoginProviders.json
|
||||
|
|
|
@ -139,6 +139,14 @@ const appRoutes: Routes = [
|
|||
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',
|
||||
loadChildren: () => import('./ui/sidebar/sidebar-footer/terms/terms.module').then(m => m.TermsModule),
|
||||
|
|
|
@ -4,6 +4,7 @@ export interface Principal {
|
|||
id: string;
|
||||
token: string;
|
||||
name: string;
|
||||
email: string;
|
||||
expiresAt: Date;
|
||||
authorities: AppRole[];
|
||||
avatarUrl: string;
|
||||
|
|
|
@ -5,7 +5,7 @@ import { DmpOverviewModel } from '../dmp/dmp-overview';
|
|||
export interface DatasetOverviewModel {
|
||||
id: string;
|
||||
label: string;
|
||||
status: any;
|
||||
status: number;
|
||||
datasetTemplate: DatasetProfileModel;
|
||||
|
||||
users: any[];
|
||||
|
|
|
@ -5,6 +5,10 @@ export interface UserListingModel {
|
|||
name: String;
|
||||
email: string;
|
||||
appRoles: AppRole[];
|
||||
additionalinfo: any;
|
||||
associatedDmps: any[];
|
||||
language: any;
|
||||
culture: any;
|
||||
timezone: String;
|
||||
zenodoEmail: String;
|
||||
avatarUrl: String;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ export class DatasetWizardService {
|
|||
private headers = new HttpHeaders();
|
||||
|
||||
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[]> {
|
||||
|
@ -39,7 +39,7 @@ export class DatasetWizardService {
|
|||
}
|
||||
|
||||
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> {
|
||||
|
|
|
@ -16,7 +16,7 @@ export class DatasetExternalAutocompleteService {
|
|||
private httpClient: HttpClient,
|
||||
private datasetProfileService: DatasetProfileService,
|
||||
private configurationService: ConfigurationService) {
|
||||
this.actionUrl = configurationService.server + 'datasetwizard/';
|
||||
this.actionUrl = configurationService.server + 'datasets/';
|
||||
}
|
||||
|
||||
getDatasetProfileById(datasetProfileID) {
|
||||
|
|
|
@ -90,7 +90,8 @@ export class DatasetService {
|
|||
return this.httpClient.get(this.actionUrl + 'getPDF/' + id, { responseType: 'blob', observe: 'response', headers: headerPdf });
|
||||
}
|
||||
|
||||
public downloadJson(id: string): Observable<HttpResponse<Blob>> {
|
||||
return this.httpClient.get(this.actionUrl + 'rda/' + id, { responseType: 'blob', observe: 'response' });
|
||||
}
|
||||
//GK: NO
|
||||
// public downloadJson(id: string): Observable<HttpResponse<Blob>> {
|
||||
// return this.httpClient.get(this.actionUrl + 'rda/' + id, { responseType: 'blob', observe: 'response' });
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
<p class="col dataset-label p-0 ml-3 mb-0">{{ dataset.label }}</p>
|
||||
</div>
|
||||
<div class="row d-flex align-items-center mt-3 mb-4 label-txt">
|
||||
<div *ngIf="isUserDatasetRelated()" class="d-flex">
|
||||
<p class="ml-0 mr-3 mb-0 label2-txt">
|
||||
<div *ngIf="isUserDatasetRelated()" class="d-flex mr-2">
|
||||
<p class="ml-0 mb-0 label2-txt">
|
||||
{{ roleDisplayFromList(dataset.users) }}
|
||||
</p>
|
||||
</div>
|
||||
|
@ -33,12 +33,12 @@
|
|||
<mat-icon class="status-icon">lock_outline</mat-icon>
|
||||
{{'DMP-OVERVIEW.LOCKED' | translate}}
|
||||
</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"}}
|
||||
</div>
|
||||
<div class="d-flex ml-2 mr-4">
|
||||
<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}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -49,12 +49,12 @@
|
|||
matTooltipPosition="above">
|
||||
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
|
||||
</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"
|
||||
matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
|
||||
<mat-icon class="mat-mini-fab-icon">create</mat-icon>
|
||||
</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}}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon class="mat-mini-fab-icon">delete</mat-icon>
|
||||
|
@ -91,17 +91,17 @@
|
|||
</div>
|
||||
<div class="col-md-4 col-lg-4 p-0">
|
||||
<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)">
|
||||
<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>
|
||||
<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 class="row ml-0 mr-0 pl-4 d-flex align-items-center">
|
||||
<hr class="hr-line">
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<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">
|
||||
<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">
|
||||
{{ 'DMP-LISTING.ACTIONS.EXPORT' | translate }}</p>
|
||||
</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">
|
||||
<button mat-menu-item (click)="downloadPDF(dataset.id)">
|
||||
<i class="fa fa-file-pdf-o pr-2"></i>
|
||||
|
@ -122,10 +128,11 @@
|
|||
<i class="fa fa-file-code-o pr-2"></i>
|
||||
<span>{{'GENERAL.FILE-TYPES.XML' | translate}}</span>
|
||||
</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>
|
||||
<span>{{'GENERAL.FILE-TYPES.JSON' | translate}}</span>
|
||||
</button>
|
||||
</button> -->
|
||||
</mat-menu>
|
||||
</div>
|
||||
<div class="frame mb-3 pt-4 pl-3 pr-3 pb-1">
|
||||
|
|
|
@ -29,6 +29,10 @@
|
|||
color: #A7A7A7;
|
||||
}
|
||||
|
||||
.check-icon {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.account-icon {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
@ -52,7 +56,7 @@
|
|||
|
||||
.dmp-btn {
|
||||
width: 35em;
|
||||
height: 2.3em;
|
||||
min-height: 2.3em;
|
||||
background-color: #129D99;
|
||||
border-radius: 4px;
|
||||
flex-direction: row;
|
||||
|
@ -76,15 +80,15 @@
|
|||
.frame-btn {
|
||||
border: 1px solid #212121;
|
||||
color: black;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.finalize-btn {
|
||||
border: 1px solid #129D99;
|
||||
color: #129D99;
|
||||
border: 1px solid #F7DD72;
|
||||
background: #F5DB71;
|
||||
}
|
||||
|
||||
.frame-btn, .finalize-btn {
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0px 2px 6px #00000029;
|
||||
}
|
||||
|
||||
|
@ -177,6 +181,7 @@
|
|||
overflow: hidden;
|
||||
color: #FFFFFF;
|
||||
opacity: 0.8;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.doi-label {
|
||||
|
@ -221,10 +226,6 @@
|
|||
color: #000000;
|
||||
}
|
||||
|
||||
.finalize-txt {
|
||||
color: #129D99;
|
||||
}
|
||||
|
||||
.frame-txt, .finalize-txt {
|
||||
font-size: 0.75em;
|
||||
font-weight: bold;
|
||||
|
|
|
@ -28,6 +28,9 @@ import { DatasetCopyDialogueComponent } from '../dataset-wizard/dataset-copy-dia
|
|||
import { DmpService } from '@app/core/services/dmp/dmp.service';
|
||||
import { ResearcherModel } from '@app/core/model/researcher/researcher';
|
||||
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({
|
||||
|
@ -38,7 +41,8 @@ import { LockService } from '@app/core/services/lock/lock.service';
|
|||
export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
||||
|
||||
dataset: DatasetOverviewModel;
|
||||
datasetWizardModel: DatasetWizardEditorModel;
|
||||
datasetWizardEditorModel: DatasetWizardEditorModel;
|
||||
datasetWizardModel: DatasetWizardModel;
|
||||
isNew = true;
|
||||
isFinalized = false;
|
||||
isPublicView = true;
|
||||
|
@ -87,10 +91,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
this.dataset = data;
|
||||
this.getDmpResearchers();
|
||||
this.getDmpUsers();
|
||||
this.datasetWizardService.getSingle(this.dataset.id).pipe(takeUntil(this._destroyed))
|
||||
.subscribe(data => {
|
||||
this.datasetWizardModel = new DatasetWizardEditorModel().fromModel(data);
|
||||
});
|
||||
this.getDatasetWizardModel(this.dataset.id);
|
||||
this.checkLockStatus(this.dataset.id);
|
||||
this.setIsUserOwner();
|
||||
const breadCrumbs = [];
|
||||
|
@ -116,10 +117,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
this.dataset = data;
|
||||
this.getDmpResearchers();
|
||||
this.getDmpUsers();
|
||||
this.datasetWizardService.getSingle(this.dataset.id).pipe(takeUntil(this._destroyed))
|
||||
.subscribe(data => {
|
||||
this.datasetWizardModel = new DatasetWizardEditorModel().fromModel(data);
|
||||
});
|
||||
this.getDatasetWizardModel(this.dataset.id);
|
||||
this.checkLockStatus(this.dataset.id);
|
||||
this.setIsUserOwner();
|
||||
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) {
|
||||
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
||||
.subscribe(lockStatus => this.lockStatus = lockStatus);
|
||||
|
@ -278,8 +284,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
.pipe(takeUntil(this._destroyed))
|
||||
.subscribe(
|
||||
complete => {
|
||||
this.onCallbackSuccess();
|
||||
this.router.navigate(['/datasets']);
|
||||
this.onDeleteCallbackSuccess();
|
||||
},
|
||||
error => this.onDeleteCallbackError(error)
|
||||
);
|
||||
|
@ -291,23 +296,33 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
this.router.navigate(['/plans/overview/' + dmpId]);
|
||||
}
|
||||
|
||||
onCallbackSuccess(): void {
|
||||
this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
||||
onDeleteCallbackSuccess(): void {
|
||||
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) {
|
||||
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 {
|
||||
return this.configurationService.orcidPath;
|
||||
}
|
||||
|
||||
getOrcidPathForResearcher(reference: string): string {
|
||||
const path = this.getOrcidPath();
|
||||
const userId = reference.split(':')[1];
|
||||
return path + userId;
|
||||
}
|
||||
const path = this.getOrcidPath();
|
||||
const userId = reference.split(':')[1];
|
||||
return path + userId;
|
||||
}
|
||||
|
||||
downloadPDF(id: string) {
|
||||
this.datasetService.downloadPDF(id)
|
||||
|
@ -342,15 +357,16 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
});
|
||||
}
|
||||
|
||||
downloadJson(id: string) {
|
||||
this.datasetService.downloadJson(id)
|
||||
.pipe(takeUntil(this._destroyed))
|
||||
.subscribe(response => {
|
||||
const blob = new Blob([response.body], { type: 'application/json' });
|
||||
const filename = this.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition'));
|
||||
FileSaver.saveAs(blob, filename);
|
||||
})
|
||||
}
|
||||
//GK: NO
|
||||
// downloadJson(id: string) {
|
||||
// this.datasetService.downloadJson(id)
|
||||
// .pipe(takeUntil(this._destroyed))
|
||||
// .subscribe(response => {
|
||||
// const blob = new Blob([response.body], { type: 'application/json' });
|
||||
// const filename = this.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition'));
|
||||
// FileSaver.saveAs(blob, filename);
|
||||
// })
|
||||
// }
|
||||
|
||||
getFilenameFromContentDispositionHeader(header: string): string {
|
||||
const regex: RegExp = new RegExp(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/g);
|
||||
|
@ -378,7 +394,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
data: {
|
||||
formControl: formControl,
|
||||
datasetId: this.dataset.id,
|
||||
datasetProfileId: this.datasetWizardModel.profile,
|
||||
datasetProfileId: this.datasetWizardEditorModel.profile,
|
||||
datasetProfileExist: false,
|
||||
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
||||
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))
|
||||
.subscribe(
|
||||
complete => {
|
||||
this.onCallbackSuccess();
|
||||
this.reloadPage();
|
||||
this.onUpdateCallbackSuccess();
|
||||
},
|
||||
error => this.onDeleteCallbackError(error)
|
||||
error => this.onUpdateCallbackError(error)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -418,12 +433,63 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
|||
if (result) {
|
||||
const index = this.users.findIndex(x => x.id === user.id);
|
||||
if (index > -1) {
|
||||
this.users.splice(index, 1);
|
||||
this.users.splice(index, 1);
|
||||
}
|
||||
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)
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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">
|
||||
<mat-icon class="mat-mini-fab-icon">create</mat-icon>
|
||||
</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>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -132,7 +132,7 @@
|
|||
<hr class="hr-line">
|
||||
</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">
|
||||
<mat-icon class="mat-mini-fab-icon">archive</mat-icon>
|
||||
</button>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<p class="mb-0 mr-0 pl-2 frame-txt" [matMenuTriggerFor]="exportMenu">
|
||||
{{ 'DMP-LISTING.ACTIONS.EXPORT' | translate }}</p>
|
||||
</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">
|
||||
<mat-icon class="mat-mini-fab-icon">add_to_photos</mat-icon>
|
||||
</button>
|
||||
|
|
|
@ -30,14 +30,6 @@
|
|||
|
||||
// ********BUTTONS********
|
||||
|
||||
.version-btn {
|
||||
// width: 6.7em;
|
||||
height: 1.8em;
|
||||
border: 1px solid #707070;
|
||||
border-radius: 4px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.id-btn {
|
||||
background: url("../../../../assets/images/NoPath.png") no-repeat center;
|
||||
width: 1em;
|
||||
|
@ -194,7 +186,7 @@
|
|||
}
|
||||
|
||||
.doi-txt {
|
||||
font-size: 0.8em;
|
||||
font-size: 1em;
|
||||
letter-spacing: 0.009em;
|
||||
color: #7d7d7d;
|
||||
width: 12em;
|
||||
|
@ -202,6 +194,7 @@
|
|||
overflow: hidden;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.doi-panel {
|
||||
|
@ -303,6 +296,17 @@
|
|||
::ng-deep .versions-select .mat-form-field-wrapper {
|
||||
background-color: transparent !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 {
|
||||
|
|
|
@ -478,7 +478,10 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
|
|||
if (result) {
|
||||
this.dmpService.publish(dmpId)
|
||||
.pipe(takeUntil(this._destroyed))
|
||||
.subscribe(() => { this.hasPublishButton = false });
|
||||
.subscribe(() => {
|
||||
this.hasPublishButton = false;
|
||||
this.reloadPage();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
<div class="dropdown-options">
|
||||
<mat-divider class="col-12 top-divider"></mat-divider>
|
||||
<div class="col-12 pl-2">
|
||||
<a mat-button class="profile mt-2 mb-2 pl-0">
|
||||
<mat-icon class="check-icon">check</mat-icon>{{ data.user.email }}
|
||||
<a class="profile email-btn mt-2 mb-2 pl-0">
|
||||
<mat-icon class="check-icon">check</mat-icon>{{ getPrincipalEmail() }}
|
||||
</a>
|
||||
</div>
|
||||
<mat-divider class="col-12"></mat-divider>
|
||||
|
|
|
@ -19,6 +19,13 @@ $mat-card-header-size: 40px !default;
|
|||
text-align: left;
|
||||
}
|
||||
|
||||
.email-btn {
|
||||
cursor: auto;
|
||||
display: inline-block;
|
||||
line-height: 2.25rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.dropdown-top {
|
||||
width: 0rem;
|
||||
border-bottom: 0.625rem solid #FFFFFF;
|
||||
|
|
|
@ -35,6 +35,12 @@ export class UserDialogComponent implements OnInit {
|
|||
return '';
|
||||
}
|
||||
|
||||
public getPrincipalEmail(): string {
|
||||
const principal: Principal = this.authentication.current();
|
||||
if (principal) { return principal.email; }
|
||||
return '';
|
||||
}
|
||||
|
||||
public principalHasAvatar(): boolean {
|
||||
return this.authentication.current() && this.authentication.current().avatarUrl != null && this.authentication.current().avatarUrl.length > 0;
|
||||
}
|
||||
|
|
|
@ -73,7 +73,6 @@ export class NavbarComponent extends BaseComponent implements OnInit {
|
|||
this.progressIndicationService.getProgressIndicationObservable().pipe(takeUntil(this._destroyed)).subscribe(x => {
|
||||
setTimeout(() => { this.progressIndication = x; });
|
||||
});
|
||||
this.getPrincipalAsUser();
|
||||
}
|
||||
|
||||
public isAuthenticated(): boolean {
|
||||
|
@ -84,13 +83,6 @@ export class NavbarComponent extends BaseComponent implements OnInit {
|
|||
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() {
|
||||
const toggleButton = this.toggleButton;
|
||||
const body = document.getElementsByTagName('body')[0];
|
||||
|
@ -223,9 +215,6 @@ export class NavbarComponent extends BaseComponent implements OnInit {
|
|||
autoFocus: false,
|
||||
closeOnNavigation: true,
|
||||
disableClose: false,
|
||||
data: {
|
||||
user: this.user
|
||||
},
|
||||
position: { top: '64px', right: '1em' }
|
||||
});
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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;
|
||||
}
|
|
@ -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() {
|
||||
}
|
||||
|
||||
}
|
|
@ -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 { }
|
|
@ -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 { }
|
|
@ -1,5 +1,6 @@
|
|||
h1 {
|
||||
text-align: center;
|
||||
margin: 2rem 0 1rem 0;
|
||||
}
|
||||
|
||||
img {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<div class="row">
|
||||
<div class="col-12">
|
||||
<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 class="row profile-card-center-row">
|
||||
|
|
|
@ -33,7 +33,7 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
|
|||
editMode = false;
|
||||
languages = availableLanguages;
|
||||
zenodoToken: string;
|
||||
zenodoEmail: string;
|
||||
zenodoEmail: String;
|
||||
|
||||
formGroup: FormGroup;
|
||||
constructor(
|
||||
|
@ -56,13 +56,13 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
|
|||
this.currentUserId = this.authService.current().id;
|
||||
const userId = !params['id'] ? 'me' : params['id'];
|
||||
this.user = this.userService.getUser(userId).pipe(map(result => {
|
||||
result['additionalinfo'] = JSON.parse(result['additionalinfo']);
|
||||
this.zenodoToken = result['additionalinfo']['zenodoToken'];
|
||||
this.zenodoEmail = result['additionalinfo']['zenodoEmail'];
|
||||
//result['additionalinfo'] = JSON.parse(result['additionalinfo']);
|
||||
//this.zenodoToken = result['additionalinfo']['zenodoToken'];
|
||||
this.zenodoEmail = result['zenodoEmail'];
|
||||
this.formGroup = new FormBuilder().group({
|
||||
language: new FormControl(result['additionalinfo']['language'] ? availableLanguages.filter(x => x.value === result['additionalinfo']['language']['value']).pop() : '', [Validators.required]),
|
||||
timezone: new FormControl(result['additionalinfo']['timezone'], [Validators.required]),
|
||||
culture: new FormControl(result['additionalinfo']['culture'], [Validators.required])
|
||||
language: new FormControl(result['language'] ? availableLanguages.filter(x => x.value === result['language']['value']).pop() : '', [Validators.required]),
|
||||
timezone: new FormControl(result['timezone'], [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('timezone').valueChanges
|
||||
|
@ -157,7 +157,7 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
|
|||
}
|
||||
|
||||
public hasZenodo(): boolean {
|
||||
return !isNullOrUndefined(this.zenodoToken) && this.zenodoToken !== "";
|
||||
return !isNullOrUndefined(this.zenodoEmail) && this.zenodoEmail !== "";
|
||||
}
|
||||
|
||||
public loginToZenodo() {
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
"GENERAL": "Data Management Plans Creator",
|
||||
"ABOUT": "About",
|
||||
"PRIVACY": "Privacy Policy",
|
||||
"OPENSOURCE-LICENCES": "Opensource Licences",
|
||||
"TERMS": "Terms Of Service",
|
||||
"COOKIES-POLICY": "Cookies Policy",
|
||||
"PLANS": "My DMPs",
|
||||
|
@ -1193,6 +1194,10 @@
|
|||
"TITLE": "-Privacy Policy-",
|
||||
"MAIN-CONTENT": ""
|
||||
},
|
||||
"OPENSOURCE-LICENCES": {
|
||||
"TITLE": "Opensource licences",
|
||||
"MAIN-CONTENT": ""
|
||||
},
|
||||
"TERMS-OF-SERVICE": {
|
||||
"TITLE": "Terms of Service",
|
||||
"MAIN-CONTENT": ""
|
||||
|
|
|
@ -88,6 +88,7 @@
|
|||
"GENERAL": "Crear Planes de Gestión de Datos",
|
||||
"ABOUT": "Acerca de",
|
||||
"PRIVACY": "Política de privacidad",
|
||||
"OPENSOURCE-LICENCES": "Opensource Licences",
|
||||
"TERMS": "Términos de servicio",
|
||||
"COOKIES-POLICY": "Cookies Policy",
|
||||
"PLANS": "Mis PGDs",
|
||||
|
@ -1173,6 +1174,10 @@
|
|||
"TITLE": "-Política de privacidad-",
|
||||
"MAIN-CONTENT": ""
|
||||
},
|
||||
"OPENSOURCE-LICENCES": {
|
||||
"TITLE": "Opensource licences",
|
||||
"MAIN-CONTENT": ""
|
||||
},
|
||||
"TERMS-OF-SERVICE": {
|
||||
"TITLE": "-Términos del servicio-",
|
||||
"MAIN-CONTENT": ""
|
||||
|
|
|
@ -88,6 +88,7 @@
|
|||
"GENERAL": "Δημιουργός Σχεδίου Διαχείρισης Δεδομένων",
|
||||
"ABOUT": "Σχετικά",
|
||||
"PRIVACY": "Πολιτική Απορρήτου και Προστασίας Προσωπικών Δεδομένων",
|
||||
"OPENSOURCE-LICENCES": "Opensource Licences",
|
||||
"TERMS": "Όροι χρήσης",
|
||||
"COOKIES-POLICY": "Cookies Policy",
|
||||
"PLANS": "Τα Σχέδια Διαχείρισης Δεδομένων Μου",
|
||||
|
@ -1174,6 +1175,10 @@
|
|||
"TITLE": "-Πολιτική Απορρήτου-",
|
||||
"MAIN-CONTENT": ""
|
||||
},
|
||||
"OPENSOURCE-LICENCES": {
|
||||
"TITLE": "Opensource licences",
|
||||
"MAIN-CONTENT": ""
|
||||
},
|
||||
"TERMS-OF-SERVICE": {
|
||||
"TITLE": "-Όροι Χρήσης-",
|
||||
"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 |
|
@ -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>
|
||||
<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>
|
|
@ -36,6 +36,7 @@
|
|||
<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>
|
||||
|
@ -62,10 +63,10 @@
|
|||
<section class="page-section how-it-works" id="how-it-works">
|
||||
<div class="container-small">
|
||||
<div class="col">
|
||||
<div class="page-title">FAQs</div>
|
||||
<div class="page-title">About</div>
|
||||
</div>
|
||||
<div class="col pt-5 pb-3">
|
||||
<div class="row title-1">FAQs</div>
|
||||
<div class="row title-4">FAQs</div>
|
||||
</div>
|
||||
<div class="collapse-box">
|
||||
<div class="panel-heading">
|
||||
|
@ -167,7 +168,7 @@
|
|||
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -188,15 +189,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<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 conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
<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>
|
||||
|
@ -59,12 +60,12 @@
|
|||
<section class="page-section how-it-works" id="how-it-works">
|
||||
<div class="container-small">
|
||||
<div class="col">
|
||||
<div class="page-title">How it works</div>
|
||||
<div class="page-title">About</div>
|
||||
</div>
|
||||
<div class="col pt-5 pb-2">
|
||||
<div class="row title-1">How it works</div>
|
||||
<div class="col pt-5 pb-3">
|
||||
<div class="row title-4">How it works</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
|
||||
that addresses FAIR and Open best practices and assumes no barriers for its use and adoption.
|
||||
</p>
|
||||
|
@ -121,7 +122,7 @@
|
|||
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -142,15 +143,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<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 conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
<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="about/faqs.html">faqs</a>
|
||||
<a href="about/contributors.html">Contributors</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -67,7 +68,7 @@
|
|||
<div class="col page-subtitle">
|
||||
<div>Contact us to learn more</div>
|
||||
</div>
|
||||
<div class="col required">
|
||||
<div class="col required mb-5">
|
||||
<div>* Required fields</div>
|
||||
</div>
|
||||
|
||||
|
@ -104,7 +105,7 @@
|
|||
<img src="assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -124,15 +125,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<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 conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
.conditions-policy {
|
||||
text-align: left;
|
||||
text-decoration: underline;
|
||||
text-decoration: underline !important;
|
||||
font-weight: 400;
|
||||
font-family: 'Roboto',sans-serif;
|
||||
font-size: 1rem;
|
||||
|
|
|
@ -124,6 +124,7 @@ section.benefits {
|
|||
box-shadow: 0px 6px 15px #0000001A;
|
||||
border-radius: 36px;
|
||||
opacity: 1;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.benefit-card-title {
|
||||
|
@ -216,6 +217,12 @@ section.benefits {
|
|||
padding: 2rem 0rem;
|
||||
}
|
||||
|
||||
.list {
|
||||
font-size: 0.87rem;
|
||||
color: #212121;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
section.media-kit-logo {
|
||||
background: #F3F3F3;
|
||||
opacity: 1;
|
||||
|
|
|
@ -130,30 +130,30 @@ p a {
|
|||
}
|
||||
|
||||
.title-1 {
|
||||
text-align: left;
|
||||
font-size: 2.37rem;
|
||||
line-height: 2.75rem;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
font-weight: 300;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.title-2 {
|
||||
text-align: left;
|
||||
font-size: 2.37rem;
|
||||
line-height: 2.75rem;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
font-weight: 700;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.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;
|
||||
font-size: 2.37rem;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
font-weight: 300;
|
||||
color: #212121;
|
||||
opacity: 0.95;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
|
@ -323,3 +323,41 @@ hr {
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
<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="about/faqs.html">faqs</a>
|
||||
<a href="about/contributors.html">Contributors</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -350,7 +351,7 @@
|
|||
<img src="assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -371,15 +372,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<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 conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -9,14 +9,17 @@
|
|||
<!-- 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">
|
||||
<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">
|
||||
<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">
|
||||
|
@ -24,7 +27,9 @@
|
|||
<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>
|
||||
<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">
|
||||
|
@ -35,6 +40,7 @@
|
|||
<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="../about/faqs.html">faqs</a>
|
||||
<a href="../about/contributors.html">Contributors</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -50,7 +56,9 @@
|
|||
</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>
|
||||
<li class="nav-item">
|
||||
<li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -65,12 +73,17 @@
|
|||
<div class="title-3">Download ARGOS</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<p>
|
||||
<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>
|
||||
<div>Note that this page is under development.</div>
|
||||
<p>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>!
|
||||
<br>Note that this page is under development.
|
||||
</p>
|
||||
</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>
|
||||
</section>
|
||||
<!-- Footer-->
|
||||
|
@ -81,7 +94,7 @@
|
|||
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -92,34 +105,48 @@
|
|||
</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>
|
||||
<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>
|
||||
<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 d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
|
||||
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</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>
|
||||
<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>
|
|
@ -9,14 +9,17 @@
|
|||
<!-- 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">
|
||||
<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">
|
||||
<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">
|
||||
|
@ -24,7 +27,9 @@
|
|||
<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>
|
||||
<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">
|
||||
|
@ -35,6 +40,7 @@
|
|||
<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="../about/faqs.html">faqs</a>
|
||||
<a href="../about/contributors.html">Contributors</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -50,7 +56,9 @@
|
|||
</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>
|
||||
<li class="nav-item">
|
||||
<li class="nav-item"><a class="nav-link" href="/login">SIGN IN</a></li>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -64,29 +72,35 @@
|
|||
<div class="col pt-5 pb-3">
|
||||
<div class="title-3">Media Kit</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="col mb-5">
|
||||
<p>
|
||||
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:
|
||||
<ul>
|
||||
</p>
|
||||
<ul class="list">
|
||||
<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
|
||||
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.
|
||||
</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.
|
||||
</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>
|
||||
<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>
|
||||
</ul>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -98,36 +112,46 @@
|
|||
<div class="col-auto">
|
||||
<img src="../assets/img/logo-1.png" width="570" height="283">
|
||||
<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.png"><div class="col-auto pt-4"><i class="fas fa-lg fa-download"></i>PNG</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<img src="../assets/img/logo-2.png" width="570" height="283">
|
||||
<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>
|
||||
<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.png">
|
||||
<div class="col-auto pt-4"><i class="fas fa-lg fa-download"></i>PNG
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row media-kit-logo-title pt-5">Logo Usage Crimes</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 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 class="col-auto">
|
||||
<img src="../assets/img/logo-2.png" width="570" height="283">
|
||||
<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 class="row media-kit-logo-title pt-5">Logo Usage Crimes</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 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>
|
||||
</section>
|
||||
<!-- Moo Cards -->
|
||||
|
@ -143,8 +167,10 @@
|
|||
</div>
|
||||
</div>
|
||||
<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-png.zip"><i class="fas fa-lg fa-download"></i>PNG</a></div>
|
||||
<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-png.zip"><i
|
||||
class="fas fa-lg fa-download"></i>PNG</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -156,7 +182,7 @@
|
|||
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -167,34 +193,48 @@
|
|||
</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>
|
||||
<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>
|
||||
<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 d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
|
||||
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</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>
|
||||
<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>
|
|
@ -9,14 +9,17 @@
|
|||
<!-- 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">
|
||||
<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">
|
||||
<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">
|
||||
|
@ -24,7 +27,9 @@
|
|||
<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>
|
||||
<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">
|
||||
|
@ -35,6 +40,7 @@
|
|||
<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="../about/faqs.html">faqs</a>
|
||||
<a href="../about/contributors.html">Contributors</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -68,16 +74,19 @@
|
|||
</div>
|
||||
<div class="col">
|
||||
<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.
|
||||
<ul>
|
||||
<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>
|
||||
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.
|
||||
</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 class="col d-flex justify-content-center"><a href="/user-guide"><button class="normal-btn">View User Guide
|
||||
Online</button></a></div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Footer-->
|
||||
|
@ -88,7 +97,7 @@
|
|||
<img src="../assets/img/argos-logo - Copy.svg" width="98" height="37">
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
@ -99,33 +108,47 @@
|
|||
</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>
|
||||
<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>
|
||||
<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 d-flex justify-content-end conditions-policy" href="/terms-and-conditions">Terms and conditions</a>
|
||||
<a class="col conditions-policy" href="/cookies-policy">Cookies policy</a>
|
||||
<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>
|
||||
<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>
|
||||
</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>
|
||||
<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>
|
||||
</html>
|
|
@ -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
|
Loading…
Reference in New Issue