mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
FIX: Do not blindly pass input values to GridField_FormAction URL's
The length of input fields can very quickly exceed the max URI length resulting in 414 errors when printing or exporting results. To access the input values for a specific GridField action, encapsulate this in your own Entwine instance.
This commit is contained in:
parent
1ddd1ddc47
commit
1853fc864a
@ -157,16 +157,24 @@
|
|||||||
},
|
},
|
||||||
onclick: function(e){
|
onclick: function(e){
|
||||||
var btn = this.closest(':button'), grid = this.getGridField(),
|
var btn = this.closest(':button'), grid = this.getGridField(),
|
||||||
form = this.closest('form'), data = form.find(':input').serialize();
|
form = this.closest('form'), data = form.find(':input.gridstate').serialize();;
|
||||||
|
|
||||||
// Add current button
|
// Add current button
|
||||||
data += '&' + encodeURIComponent(btn.attr('name')) + '=' + encodeURIComponent(btn.val());
|
data += "&" + encodeURIComponent(btn.attr('name')) + '=' + encodeURIComponent(btn.val());
|
||||||
|
|
||||||
// Include any GET parameters from the current URL, as the view state might depend on it.
|
// Include any GET parameters from the current URL, as the view
|
||||||
// For example, a list prefiltered through external search criteria might be passed to GridField.
|
// state might depend on it.
|
||||||
if(window.location.search) data = window.location.search.replace(/^\?/, '') + '&' + data;
|
// For example, a list prefiltered through external search criteria
|
||||||
|
// might be passed to GridField.
|
||||||
|
if(window.location.search) {
|
||||||
|
data = window.location.search.replace(/^\?/, '') + '&' + data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var url = $.path.makeUrlAbsolute(
|
||||||
|
grid.data('url') + '?' + data,
|
||||||
|
$('base').attr('href')
|
||||||
|
);
|
||||||
|
|
||||||
var url = $.path.makeUrlAbsolute(grid.data('url') + '?' + data, $('base').attr('href'));
|
|
||||||
var newWindow = window.open(url);
|
var newWindow = window.open(url);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -188,22 +196,30 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Prevents actions from causing an ajax reload of the field.
|
* Prevents actions from causing an ajax reload of the field.
|
||||||
* Useful e.g. for actions which rely on HTTP response headers being interpreted nativel
|
*
|
||||||
* by the browser, like file download triggers.
|
* Useful e.g. for actions which rely on HTTP response headers being
|
||||||
|
* interpreted natively by the browser, like file download triggers.
|
||||||
*/
|
*/
|
||||||
$('.ss-gridfield .action.no-ajax').entwine({
|
$('.ss-gridfield .action.no-ajax').entwine({
|
||||||
onclick: function(e){
|
onclick: function(e){
|
||||||
var self = this, btn = this.closest(':button'), grid = this.getGridField(),
|
var self = this, btn = this.closest(':button'), grid = this.getGridField(),
|
||||||
form = this.closest('form'), data = form.find(':input').serialize();
|
form = this.closest('form'), data = form.find(':input.gridstate').serialize();
|
||||||
|
|
||||||
// Add current button
|
// Add current button
|
||||||
data += '&' + encodeURIComponent(btn.attr('name')) + '=' + encodeURIComponent(btn.val());
|
data += "&" + encodeURIComponent(btn.attr('name')) + '=' + encodeURIComponent(btn.val());
|
||||||
|
|
||||||
// Include any GET parameters from the current URL, as the view state might depend on it.
|
// Include any GET parameters from the current URL, as the view
|
||||||
// For example, a list prefiltered through external search criteria might be passed to GridField.
|
// state might depend on it. For example, a list pre-filtered
|
||||||
if(window.location.search) data = window.location.search.replace(/^\?/, '') + '&' + data;
|
// through external search criteria might be passed to GridField.
|
||||||
|
if(window.location.search) {
|
||||||
|
data = window.location.search.replace(/^\?/, '') + '&' + data;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.location.href = $.path.makeUrlAbsolute(
|
||||||
|
grid.data('url') + '?' + data,
|
||||||
|
$('base').attr('href')
|
||||||
|
);
|
||||||
|
|
||||||
window.location.href = $.path.makeUrlAbsolute(grid.data('url') + '?' + data, $('base').attr('href'));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -340,7 +356,5 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
}(jQuery));
|
||||||
}(jQuery));
|
|
Loading…
Reference in New Issue
Block a user