diff --git a/modules/candidate_parameters/ajax/formHandler.php b/modules/candidate_parameters/ajax/formHandler.php
index 8a8db53c7ee..3bb3e861ea3 100644
--- a/modules/candidate_parameters/ajax/formHandler.php
+++ b/modules/candidate_parameters/ajax/formHandler.php
@@ -450,6 +450,7 @@ function editConsentStatusFields(\Database $db)
// Validate data
$recordExists = array_key_exists($consentID, $candidateConsent);
$oldStatus = $candidateConsent[$consentID]['Status'] ?? null;
+ $oldDate = $candidateConsent[$consentID]['DateGiven'] ?? null;
$oldWithdrawal = $candidateConsent[$consentID]['DateWithdrawn'] ?? null;
$validated = false;
@@ -505,7 +506,14 @@ function editConsentStatusFields(\Database $db)
echo('A status is missing for at least one consent type.
Please select a valid status for all consent types.');
return;
+ } elseif (!empty($oldStatus)
+ || !empty($oldDate)
+ || !empty($oldWithdrawal)
+ ) {
+ // Only update empty fields if they were not already empty
+ $validated = true;
}
+
break;
}
diff --git a/modules/candidate_parameters/jsx/ConsentStatus.js b/modules/candidate_parameters/jsx/ConsentStatus.js
index 59a7d44aa9c..d026d3972f7 100644
--- a/modules/candidate_parameters/jsx/ConsentStatus.js
+++ b/modules/candidate_parameters/jsx/ConsentStatus.js
@@ -99,11 +99,21 @@ class ConsentStatus extends Component {
if (this.state.Data.consents.hasOwnProperty(consent)) {
const oldConsent = this.state.Data.consentStatuses[consent];
const newConsent = this.state.formData[consent];
- // Clear withdrawal date if consent status changes from no
- // (or empty if uncleaned data) to yes
if (formElement === consent) {
+ // Clear withdrawal date if consent status changes from no
+ // (or empty if uncleaned data) to yes
if ((newConsent === 'yes' && oldConsent !== 'yes') ||
- (newConsent === 'no' && oldConsent === null)) {
+ (newConsent === 'no' &&
+ (oldConsent === null || oldConsent === '')
+ )
+ ) {
+ formData[consent + '_withdrawal'] = '';
+ formData[consent + '_withdrawal2'] = '';
+ }
+ // Clear date if response set back to null
+ if (newConsent === '' && oldConsent !== null) {
+ formData[consent + '_date'] = '';
+ formData[consent + '_date2'] = '';
formData[consent + '_withdrawal'] = '';
formData[consent + '_withdrawal2'] = '';
}
@@ -300,18 +310,20 @@ class ConsentStatus extends Component {
const newConsent = this.state.formData[consentName];
const withdrawalDate = this.state.Data.withdrawals[consentName];
// Define defaults
- let emptyOption = true;
let dateRequired = false;
+ let responseDateDisabled = true;
let withdrawalRequired = false;
// Let date of withdrawal field be disabled until it is needed
let withdrawalDisabled = true;
// If answer to consent is 'yes', require date of consent
if (newConsent === 'yes') {
+ responseDateDisabled = false;
dateRequired = true;
}
// If answer to consent is 'no', require date of consent
if (newConsent === 'no') {
+ responseDateDisabled = false;
dateRequired = true;
// If answer was previously 'yes' and consent is now being withdrawn, enable and require withdrawal date
// If consent was previously withdrawn and stays withdrawn, enable and require withdrawal date
@@ -322,10 +334,6 @@ class ConsentStatus extends Component {
withdrawalRequired = true;
}
}
- // Disallow clearing a valid consent status by removing empty option
- if (oldConsent === 'no' || oldConsent === 'yes') {
- emptyOption = false;
- }
// Set up elements
const label = this.state.Data.consents[consentName];
@@ -353,14 +361,13 @@ class ConsentStatus extends Component {
onUserInput={this.setFormData}
disabled={disabled}
required={false}
- emptyOption={emptyOption}
/>