Bug 31497: Prevent ID clash on quick add fields

The quick add clones the original fields, including ids. This can cause some clash when
other JS is running on the page.

This patch updates the ids of the fields before adding to the form, which prevents bad
copying/clearing of fields

To test:
* Go to patrons module
* Click on Quick add new patron (I chose Patron as category)
* On sample database these fields are marked as mandatory:
  * Surname
  * Cardnumber
  * Library
  * Category
* Fill in Surname, leave cardnumber empty
* Save - mandatory message is shown
* Fill in cardnumber - save
* The patron is saved
* BUT: cardnumber is empty!
APPLY PATCH
* Repeat plan above
* Cardnumber is correctly saved

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu>
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 0f599e2a2a)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Nick Clemens 2022-09-13 12:19:57 +00:00 committed by Lucas Gass
parent 79bc7a8de5
commit c8793b1cd3

View file

@ -1798,10 +1798,24 @@ legend:hover {
input_label='title';
}
if( qaddfields.indexOf( input_label ) != -1 || $(this).attr('class') == 'required' ){
$(this).parent().clone().appendTo("#quick_add_list");
[% UNLESS mandatorypassword %]
if( input_label == 'password' ) $("#entryform label[for='password2']").parent().clone().appendTo("#quick_add_list");
[% END %]
let orig_li = $(this).parent();
if( orig_li.attr('class') == 'radio' ){
let new_field = orig_li.clone();
new_field.children('label').each(function(){
let child_input = $(this).children('input');
child_input.attr("id",child_input.attr("id") + "_qa");
});
new_field.appendTo("#quick_add_list");
} else {
let orig_input_id = orig_li.children("input,textarea,select").attr("id");
console.log( orig_input_id);
let new_field = orig_li.clone();
new_field.children("#"+orig_input_id).attr("id",orig_input_id + "_qa");
new_field.appendTo("#quick_add_list");
[% UNLESS mandatorypassword %]
if( input_label == 'password' ) $("#entryform label[for='password2']").parent().clone().appendTo("#quick_add_list");
[% END %]
}
}
});
if ( $("#memberentry_guarantor").length ) {