From 9099e62b9bcde8f303db1332ff24869ab4f23f8d Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Tue, 20 Oct 2020 12:03:23 +0200 Subject: [PATCH] some actions by role --- .../controller/OrganizationController.java | 4 +- .../organizations/utils/DatabaseUtils.java | 78 ++++++++++--------- .../resources/html/pages/advanced/new.html | 3 +- .../resources/html/pages/edit/edit.html | 9 ++- .../html/parts/org_metadata.form.html | 36 ++++++--- .../static/resources/js/organizations.js | 10 ++- .../src/main/resources/templates/home.html | 8 ++ 7 files changed, 92 insertions(+), 56 deletions(-) diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java index f03a819b..6eafb786 100644 --- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java +++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java @@ -44,7 +44,6 @@ import eu.dnetlib.organizations.repository.readonly.OrganizationSimpleViewReposi import eu.dnetlib.organizations.repository.readonly.OrganizationViewRepository; import eu.dnetlib.organizations.repository.readonly.SuggestionInfoViewByCountryRepository; import eu.dnetlib.organizations.utils.DatabaseUtils; -import eu.dnetlib.organizations.utils.OrganizationStatus; @RestController @RequestMapping("/api/organizations") @@ -127,8 +126,7 @@ public class OrganizationController { if (UserInfo.isSuperAdmin(authentication) || UserInfo.isNationalAdmin(authentication) && userCountryRepository.verifyAuthorizationForCountry(org.getCountry(), authentication.getName())) { - databaseUtils.updateStatus(id, OrganizationStatus.deleted, authentication.getName()); - return organizationViewRepository.findById(id).get(); + return databaseUtils.markAsDeleted(id, authentication.getName()); } else { throw new RuntimeException("User not authorized"); } diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java index 769ed286..6239d32b 100644 --- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java +++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java @@ -104,8 +104,6 @@ public class DatabaseUtils { final boolean alreadyApproved = StringUtils.equals(oldStatus, OrganizationStatus.approved.toString()); - final String oldId = orgView.getId(); - final String newStatus; if (!isSimpleUser) { // IS ADMIN newStatus = OrganizationStatus.approved.toString(); @@ -117,14 +115,10 @@ public class DatabaseUtils { throw new RuntimeException("User not authorized"); } - if (StringUtils.isBlank(orgView.getId())) { + final String oldId = StringUtils.isNotBlank(orgView.getId()) ? new String(orgView.getId()) : null; + + if (oldId == null || !oldId.startsWith(OpenOrgsConstants.OPENORGS_PREFIX)) { orgView.setId(null); - } else if (!alreadyApproved) { - cleanOldRelations(oldId); - organizationRepository.deleteById(oldId); - orgView.setId(null); - } else { - cleanOldRelations(orgView.getId()); } final Organization org = new Organization(orgView.getId(), @@ -136,24 +130,31 @@ public class DatabaseUtils { final String newId = organizationRepository.save(org).getId(); - makeNewRelations(newId, orgView); + final OffsetDateTime now = OffsetDateTime.now(); - updateHistoryFields(newId, user, alreadyApproved); + organizationRepository.updateModificationDate(newId, user, now); + + if (StringUtils.equals(newId, oldId)) { + makeRelations(newId, orgView, true); + } else { + organizationRepository.updateCreationDate(newId, user, now); + makeRelations(newId, orgView, false); + if (oldId != null) { + final OpenaireDuplicate dup = new OpenaireDuplicate(); + dup.setLocalId(newId); + dup.setOaOriginalId(oldId); + dup.setRelType(SimilarityType.is_similar.toString()); + + openaireDuplicateRepository.save(dup); + openaireConflictRepository.updateModificationDate(newId, oldId, user, now); + organizationRepository.updateStatus(oldId, OrganizationStatus.duplicate.toString()); + organizationRepository.updateModificationDate(oldId, user, now); + } + } return newId; } - private void updateHistoryFields(final String id, final String user, final boolean update) { - - final OffsetDateTime now = OffsetDateTime.now(); - if (update) { - organizationRepository.updateModificationDate(id, user, now); - } else { - organizationRepository.updateCreationDate(id, user, now); - organizationRepository.updateModificationDate(id, user, now); - } - } - @Transactional public void saveDuplicates(final List simrels, final String user) { final OffsetDateTime now = OffsetDateTime.now(); @@ -164,15 +165,23 @@ public class DatabaseUtils { openaireDuplicateRepository.updateModificationDate(d.getLocalId(), d.getOaOriginalId(), user, now); if (d.getRelType().equals(SimilarityType.is_similar.toString())) { - updateStatus(d.getOaOriginalId(), OrganizationStatus.duplicate, user); + updateStatus(d.getOaOriginalId(), OrganizationStatus.duplicate, user, now); } else { - updateStatus(d.getOaOriginalId(), OrganizationStatus.suggested, user); + updateStatus(d.getOaOriginalId(), OrganizationStatus.suggested, user, now); } }); } - private void makeNewRelations(final String orgId, final OrganizationView orgView) { + private void makeRelations(final String orgId, final OrganizationView orgView, final boolean update) { + if (update) { + acronymRepository.deleteByOrgId(orgId); + otherNameRepository.deleteByOrgId(orgId); + otherIdentifierRepository.deleteByOrgId(orgId); + urlRepository.deleteByOrgId(orgId); + relationshipRepository.deleteById1(orgId); + relationshipRepository.deleteById2(orgId); + } orgView.getAcronyms().forEach(s -> acronymRepository.save(new Acronym(orgId, s))); orgView.getOtherNames().forEach(n -> otherNameRepository.save(new OtherName(orgId, n.getName(), n.getLang()))); orgView.getOtherIdentifiers().forEach(id -> otherIdentifierRepository.save(new OtherIdentifier(orgId, id.getId(), id.getType()))); @@ -180,15 +189,6 @@ public class DatabaseUtils { orgView.getRelations().forEach(r -> makeRelation(orgId, r.getRelatedOrgId(), RelationType.valueOf(r.getType()))); } - private void cleanOldRelations(final String id) { - acronymRepository.deleteByOrgId(id); - otherNameRepository.deleteByOrgId(id); - otherIdentifierRepository.deleteByOrgId(id); - urlRepository.deleteByOrgId(id); - relationshipRepository.deleteById1(id); - relationshipRepository.deleteById2(id); - } - @Cacheable("vocs") public List listValuesOfVocabularyTable(final VocabularyTable table) { final String sql = "select val as value, name as name from " + table; @@ -353,9 +353,15 @@ public class DatabaseUtils { } @Transactional - public void updateStatus(final String id, final OrganizationStatus status, final String user) { + public OrganizationView markAsDeleted(final String id, final String user) { + final OffsetDateTime now = OffsetDateTime.now(); + updateStatus(id, OrganizationStatus.deleted, user, now); + return organizationViewRepository.findById(id).get(); + } + + private void updateStatus(final String id, final OrganizationStatus status, final String user, final OffsetDateTime now) { organizationRepository.updateStatus(id, status.toString()); - updateHistoryFields(id, user, true); + organizationRepository.updateModificationDate(id, user, now); } @Transactional diff --git a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/advanced/new.html b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/advanced/new.html index fda7ff45..65fda180 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/advanced/new.html +++ b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/advanced/new.html @@ -5,6 +5,7 @@
- + +
diff --git a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/edit/edit.html b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/edit/edit.html index 2bb7d481..7a4480a8 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/edit/edit.html +++ b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/pages/edit/edit.html @@ -23,9 +23,14 @@
- - + + + + + + +
diff --git a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/parts/org_metadata.form.html b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/parts/org_metadata.form.html index f9dc3ca2..d059153f 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/parts/org_metadata.form.html +++ b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/parts/org_metadata.form.html @@ -4,11 +4,13 @@ This is a pending organization. Please evaluate it before approving.
- This organization is managed by the system. You can not edit. + {{org.status}} This organization is managed by the system. You can not edit. +
+
+ {{org.status}} You are not authorized to modify this organization.
- -
+
Official name and type
@@ -32,7 +34,7 @@
-
+
Geographical location
@@ -66,7 +68,7 @@
-
+
Other names and identifiers
@@ -232,7 +234,7 @@
-
+
Relations
@@ -285,10 +287,24 @@
- + +
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
diff --git a/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js b/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js index a812adb3..8fc753ee 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js +++ b/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js @@ -126,12 +126,11 @@ orgsModule.directive('orgFormMetadata', function($http, $location, $route, $rout 'orgId' : '@', 'org' : '=', 'vocabularies' : '=', - 'mode' : '@', // insert, update or approve + 'mode' : '@', // insert_full, insert_pending, update_simple, update_full, approve, readonly, not_authorized 'infoMethod' : '&' }, templateUrl: 'resources/html/parts/org_metadata.form.html', link: function(scope, element, attrs, ctrl) { - scope.newRelation = {}; scope.newRelType = ''; @@ -161,6 +160,9 @@ orgsModule.directive('orgFormMetadata', function($http, $location, $route, $rout alert('ERROR: ' + res.data.error + ' (' + res.data.message + ')'); }); } + + scope.deleteOrg = function() { alert('TODO'); }; + scope.saveAsDiscarded = function() { alert('TODO'); }; } } }); @@ -293,10 +295,9 @@ orgsModule.controller('newOrgCtrl', function ($scope, $http, $routeParams, $loca "urls": [], "relations": [] }; - + $scope.adminMode = adminMode(); $scope.vocabularies = {}; vocabulariesService.getVocs(function(vocs) { $scope.vocabularies = vocs; }); - }); orgsModule.controller('searchCtrl', function ($scope, $location) { @@ -424,6 +425,7 @@ orgsModule.controller('showEditCtrl', function ($scope, $http, $routeParams, $ro $scope.info = {}; $scope.currentTab = 1 $scope.vocabularies = {}; + $scope.adminMode = adminMode(); $scope.getInfo = function() { $http.get('api/organizations/info?id=' + $scope.orgId).then(function successCallback(res) { diff --git a/apps/dnet-orgs-database-application/src/main/resources/templates/home.html b/apps/dnet-orgs-database-application/src/main/resources/templates/home.html index e6a6d090..e8476d3a 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/templates/home.html +++ b/apps/dnet-orgs-database-application/src/main/resources/templates/home.html @@ -61,6 +61,8 @@ fieldset > legend { font-size : 1.2rem !important; } Advanced @@ -96,6 +98,12 @@ fieldset > legend { font-size : 1.2rem !important; } + +