diff --git a/build.gradle b/build.gradle
index d89e1af6c..3dbad12d5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -186,7 +186,7 @@ dependencies {
providedCompile "io.methvin:directory-watcher:0.4.0"
if (!Boolean.valueOf(inplace)) {
- implementation "org.grails.plugins:ecodata-client-plugin:6.1"
+ implementation "org.grails.plugins:ecodata-client-plugin:6.1.2"
}
}
diff --git a/gradle.properties b/gradle.properties
index f33fd3af1..e37953c05 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
-meritVersion=3.0
+meritVersion=3.0.1-SNAPSHOT
grailsVersion=5.3.2
grailsGradlePluginVersion=5.3.0
groovyVersion=3.0.11
diff --git a/grails-app/services/au/org/ala/merit/DocumentService.groovy b/grails-app/services/au/org/ala/merit/DocumentService.groovy
index afc9a0c32..cff949177 100644
--- a/grails-app/services/au/org/ala/merit/DocumentService.groovy
+++ b/grails-app/services/au/org/ala/merit/DocumentService.groovy
@@ -186,7 +186,7 @@ class DocumentService {
} else if (document.programId) {
canEdit = userService.canUserEditProgramReport(userId, document.programId)
} else if (document.organisationId) {
- canEdit = userService.isUserAdminForOrganisation(userId, document.organisationId)
+ canEdit = userService.isUserEditorForOrganisation(userId, document.organisationId)
} else if (document.activityId) {
canEdit = userService.canUserEditActivity(userId, document.activityId)
} else if (document.managementUnitId) {
diff --git a/grails-app/views/activity/activityReport.gsp b/grails-app/views/activity/activityReport.gsp
index 97644249d..b99279812 100644
--- a/grails-app/views/activity/activityReport.gsp
+++ b/grails-app/views/activity/activityReport.gsp
@@ -226,13 +226,15 @@
var activityId = '${activity.activityId}';
var projectId = '${activity.projectId}';
+ var documentOwner = ;
var outputModelConfig = {
activityId: activityId,
projectId: projectId,
disablePrepop: false,
speciesConfig:,
- recoveryDataStorageKey: recoveryDataStorageKey
+ recoveryDataStorageKey: recoveryDataStorageKey,
+ documentOwner: documentOwner
};
outputModelConfig = _.extend(fcConfig, outputModelConfig);
diff --git a/package-lock.json b/package-lock.json
index 2ccafe636..5048db4aa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,7 +13,7 @@
},
"devDependencies": {
"@metahub/karma-jasmine-jquery": "^2.0.1",
- "chromedriver": "114.0.1",
+ "chromedriver": "117.0.3",
"jasmine-core": "^3.5.0",
"jasmine-jquery": "^2.0.0",
"jquery": "3.6.2",
@@ -66,12 +66,20 @@
}
},
"node_modules/@babel/core/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/@babel/core/node_modules/ms": {
@@ -81,9 +89,9 @@
"dev": true
},
"node_modules/@babel/core/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"bin": {
"semver": "bin/semver"
@@ -281,12 +289,20 @@
}
},
"node_modules/@babel/traverse/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/@babel/traverse/node_modules/ms": {
@@ -465,9 +481,9 @@
"dev": true
},
"node_modules/axios": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
- "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
+ "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
"dev": true,
"dependencies": {
"follow-redirects": "^1.15.0",
@@ -637,15 +653,15 @@
}
},
"node_modules/chromedriver": {
- "version": "114.0.1",
- "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-114.0.1.tgz",
- "integrity": "sha512-Srkyt7xv+RL9aSNVkmARm0tAfw84fIBKge9c1MCTiHfW0tjuNFdhKVlgD0TmPmwSKOeFJrTdd1Flf2hGWWKsUw==",
+ "version": "117.0.3",
+ "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-117.0.3.tgz",
+ "integrity": "sha512-c2rk2eGK5zZFBJMdviUlAJfQEBuPNIKfal4+rTFVYAmrWbMPYAqPozB+rIkc1lDP/Ryw44lPiqKglrI01ILhTQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"@testim/chrome-version": "^1.1.3",
- "axios": "^1.2.1",
- "compare-versions": "^5.0.1",
+ "axios": "^1.4.0",
+ "compare-versions": "^6.0.0",
"extract-zip": "^2.0.1",
"https-proxy-agent": "^5.0.1",
"proxy-from-env": "^1.1.0",
@@ -655,7 +671,7 @@
"chromedriver": "bin/chromedriver"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/cliui": {
@@ -697,9 +713,9 @@
}
},
"node_modules/compare-versions": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz",
- "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz",
+ "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==",
"dev": true
},
"node_modules/concat-map": {
@@ -788,9 +804,9 @@
}
},
"node_modules/deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"node_modules/delayed-stream": {
@@ -1367,12 +1383,12 @@
"dev": true
},
"node_modules/ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
+ "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
"dev": true,
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/is-binary-path": {
@@ -1442,14 +1458,14 @@
}
},
"node_modules/is2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz",
- "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==",
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz",
+ "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==",
"dev": true,
"dependencies": {
"deep-is": "^0.1.3",
- "ip-regex": "^2.1.0",
- "is-url": "^1.2.2"
+ "ip-regex": "^4.1.0",
+ "is-url": "^1.2.4"
},
"engines": {
"node": ">=v0.10.0"
@@ -1550,12 +1566,20 @@
}
},
"node_modules/istanbul-lib-source-maps/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/istanbul-lib-source-maps/node_modules/ms": {
@@ -2148,9 +2172,9 @@
"dev": true
},
"node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2364,22 +2388,30 @@
}
},
"node_modules/tcp-port-used": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz",
- "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz",
+ "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==",
"dev": true,
"dependencies": {
- "debug": "4.1.0",
- "is2": "2.0.1"
+ "debug": "4.3.1",
+ "is2": "^2.0.6"
}
},
"node_modules/tcp-port-used/node_modules/debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"dependencies": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/tcp-port-used/node_modules/ms": {
@@ -2678,12 +2710,12 @@
},
"dependencies": {
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"ms": {
@@ -2693,9 +2725,9 @@
"dev": true
},
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true
},
"source-map": {
@@ -2882,12 +2914,12 @@
},
"dependencies": {
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"ms": {
@@ -3038,9 +3070,9 @@
"dev": true
},
"axios": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
- "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
+ "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
"dev": true,
"requires": {
"follow-redirects": "^1.15.0",
@@ -3172,14 +3204,14 @@
}
},
"chromedriver": {
- "version": "114.0.1",
- "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-114.0.1.tgz",
- "integrity": "sha512-Srkyt7xv+RL9aSNVkmARm0tAfw84fIBKge9c1MCTiHfW0tjuNFdhKVlgD0TmPmwSKOeFJrTdd1Flf2hGWWKsUw==",
+ "version": "117.0.3",
+ "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-117.0.3.tgz",
+ "integrity": "sha512-c2rk2eGK5zZFBJMdviUlAJfQEBuPNIKfal4+rTFVYAmrWbMPYAqPozB+rIkc1lDP/Ryw44lPiqKglrI01ILhTQ==",
"dev": true,
"requires": {
"@testim/chrome-version": "^1.1.3",
- "axios": "^1.2.1",
- "compare-versions": "^5.0.1",
+ "axios": "^1.4.0",
+ "compare-versions": "^6.0.0",
"extract-zip": "^2.0.1",
"https-proxy-agent": "^5.0.1",
"proxy-from-env": "^1.1.0",
@@ -3222,9 +3254,9 @@
}
},
"compare-versions": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz",
- "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz",
+ "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==",
"dev": true
},
"concat-map": {
@@ -3298,9 +3330,9 @@
}
},
"deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"delayed-stream": {
@@ -3746,9 +3778,9 @@
"dev": true
},
"ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
+ "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
"dev": true
},
"is-binary-path": {
@@ -3800,14 +3832,14 @@
"dev": true
},
"is2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz",
- "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==",
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz",
+ "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==",
"dev": true,
"requires": {
"deep-is": "^0.1.3",
- "ip-regex": "^2.1.0",
- "is-url": "^1.2.2"
+ "ip-regex": "^4.1.0",
+ "is-url": "^1.2.4"
}
},
"isbinaryfile": {
@@ -3883,12 +3915,12 @@
},
"dependencies": {
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"ms": {
@@ -4353,9 +4385,9 @@
"dev": true
},
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
},
"setprototypeof": {
@@ -4521,22 +4553,22 @@
}
},
"tcp-port-used": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz",
- "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz",
+ "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==",
"dev": true,
"requires": {
- "debug": "4.1.0",
- "is2": "2.0.1"
+ "debug": "4.3.1",
+ "is2": "^2.0.6"
},
"dependencies": {
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"ms": {
diff --git a/package.json b/package.json
index ba7cc1029..8730fa501 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
},
"devDependencies": {
"@metahub/karma-jasmine-jquery": "^2.0.1",
- "chromedriver": "114.0.1",
+ "chromedriver": "117.0.3",
"jasmine-core": "^3.5.0",
"jasmine-jquery": "^2.0.0",
"jquery": "3.6.2",
diff --git a/src/main/groovy/au/org/ala/merit/command/EditOrViewReportCommand.groovy b/src/main/groovy/au/org/ala/merit/command/EditOrViewReportCommand.groovy
index bf592cc2a..b4daace4b 100644
--- a/src/main/groovy/au/org/ala/merit/command/EditOrViewReportCommand.groovy
+++ b/src/main/groovy/au/org/ala/merit/command/EditOrViewReportCommand.groovy
@@ -38,6 +38,8 @@ abstract class EditOrViewReportCommand implements Validateable {
model.returnTo = linkGenerator.link(controller:entityType, action:'index', id: id)
model.contextViewUrl = model.returnTo
model.saveReportUrl = linkGenerator.link(controller:entityType, action:'saveReport', id:id)
+ model.documentOwner = [activityId:model.activity.activityId, reportId:reportId]
+ model.documentOwner[getEntityIdField()] = id
}
}
@@ -60,10 +62,14 @@ abstract class EditOrViewReportCommand implements Validateable {
abstract String getHeaderTemplate()
boolean isOwnedByEntity(Map report) {
- String idField = getEntityType()+'Id'
+ String idField = getEntityIdField()
report[idField] == id
}
+ private String getEntityIdField() {
+ getEntityType()+'Id'
+ }
+
LinkGenerator getLinkGenerator() {
grailsApplication.getMainContext().getBean(LinkGenerator)
}
diff --git a/src/test/groovy/au/org/ala/merit/DocumentServiceSpec.groovy b/src/test/groovy/au/org/ala/merit/DocumentServiceSpec.groovy
index c38b54dab..bbfc6e555 100644
--- a/src/test/groovy/au/org/ala/merit/DocumentServiceSpec.groovy
+++ b/src/test/groovy/au/org/ala/merit/DocumentServiceSpec.groovy
@@ -127,7 +127,7 @@ class DocumentServiceSpec extends Specification implements AutowiredTest{
canDelete == false
2 * webService.getJson(_) >> [documentId:'d1', organisationId:'o2']
2 * userService.getCurrentUserId() >> userId
- 2 * userService.isUserAdminForOrganisation(userId, 'o2') >> false
+ 2 * userService.isUserEditorForOrganisation(userId, 'o2') >> false
when:
canEdit = service.canEdit(document)
@@ -138,7 +138,7 @@ class DocumentServiceSpec extends Specification implements AutowiredTest{
canDelete == true
2 * webService.getJson(_) >> [documentId:'d1', organisationId:'o2']
2 * userService.getCurrentUserId() >> userId
- 2 * userService.isUserAdminForOrganisation(userId, 'o2') >> true
+ 2 * userService.isUserEditorForOrganisation(userId, 'o2') >> true
}
def "only MERIT administrators edit or delete a read only document, regardless of ownership"() {
diff --git a/src/test/groovy/au/org/ala/merit/ManagementUnitControllerSpec.groovy b/src/test/groovy/au/org/ala/merit/ManagementUnitControllerSpec.groovy
index 117195208..1820efdc6 100644
--- a/src/test/groovy/au/org/ala/merit/ManagementUnitControllerSpec.groovy
+++ b/src/test/groovy/au/org/ala/merit/ManagementUnitControllerSpec.groovy
@@ -58,7 +58,7 @@ class ManagementUnitControllerSpec extends Specification implements ControllerUn
then:
1 * managementUnitService.get(managementUnitId) >> managementUnit
- 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.VIEW, null) >> [editable:true, report:[reportId:reportId, managementUnitId:managementUnitId]]
+ 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.VIEW, null) >> [editable:true, report:[reportId:reportId, managementUnitId:managementUnitId], activity:[activityId:'a1']]
view == '/activity/activityReportView'
model.context == managementUnit
model.contextViewUrl == '/managementUnit/index/'+managementUnitId
@@ -222,7 +222,7 @@ class ManagementUnitControllerSpec extends Specification implements ControllerUn
controller.editReport()
then:
- 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:true, report:[reportId:reportId, managementUnitId:managementUnitId]]
+ 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:true, report:[reportId:reportId, managementUnitId:managementUnitId], activity:[activityId:'a1']]
view == '/activity/activityReport'
model.context == mu
model.contextViewUrl == '/managementUnit/index/'+managementUnitId
@@ -238,7 +238,7 @@ class ManagementUnitControllerSpec extends Specification implements ControllerUn
managementUnit.config.requiresActivityLocking = true
when:
- reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:false, report:[reportId:reportId, managementUnitId:managementUnitId]]
+ reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:false, report:[reportId:reportId, managementUnitId:managementUnitId], activity:[activityId:'a1']]
params.id = managementUnitId
params.reportId = reportId
params.reportService = reportService
@@ -272,7 +272,7 @@ class ManagementUnitControllerSpec extends Specification implements ControllerUn
controller.editReport()
then:
1 * managementUnitService.get(managementUnitId) >> managementUnit
- 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [report:managementUnit.reports[0], editable:true]
+ 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [report:managementUnit.reports[0], editable:true, activity:[activityId:'a1']]
1 * reportService.lockForEditing(managementUnit.reports[0]) >> [locked:true]
view == '/activity/activityReport'
}
diff --git a/src/test/groovy/au/org/ala/merit/OrganisationControllerSpec.groovy b/src/test/groovy/au/org/ala/merit/OrganisationControllerSpec.groovy
index 0d4021239..d926413e2 100644
--- a/src/test/groovy/au/org/ala/merit/OrganisationControllerSpec.groovy
+++ b/src/test/groovy/au/org/ala/merit/OrganisationControllerSpec.groovy
@@ -454,7 +454,7 @@ class OrganisationControllerSpec extends Specification implements ControllerUnit
controller.editOrganisationReport()
then:
- 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:true, report:[reportId:reportId, organisationId:organisationId]]
+ 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:true, report:[reportId:reportId, organisationId:organisationId], activity:[activityId:'a1']]
view == '/activity/activityReport'
model.context == program
model.contextViewUrl == '/organisation/index/'+organisationId
@@ -479,7 +479,7 @@ class OrganisationControllerSpec extends Specification implements ControllerUnit
controller.editOrganisationReport()
then: "the report activity should not be locked"
- 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:false, report:[reportId:reportId, organisationId:organisationId]]
+ 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [editable:false, report:[reportId:reportId, organisationId:organisationId], activity:[activityId:'a1']]
0 * reportService.lockForEditing(_)
and: "the user should be redirected to the report view"
@@ -504,7 +504,7 @@ class OrganisationControllerSpec extends Specification implements ControllerUnit
controller.editOrganisationReport()
then:
- 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [report:organisation.reports[0], editable:true]
+ 1 * reportService.activityReportModel(reportId, ReportService.ReportMode.EDIT, null) >> [report:organisation.reports[0], editable:true, activity:[activityId:'a1']]
1 * reportService.lockForEditing(organisation.reports[0]) >> [locked:true]
view == '/activity/activityReport'
}