Issue #1575060 by andypost, mcjim, nod_: Fixed ajax_html_ids() are broken for forms with file element (encoding=multipart/form-data).

8.0.x
catch 2012-09-24 10:33:31 +01:00
parent 2c026bb857
commit e2743fdb89
3 changed files with 14 additions and 7 deletions

View File

@ -3528,7 +3528,8 @@ function drupal_html_id($id) {
// requested id. $_POST['ajax_html_ids'] contains the ids as they were
// returned by this function, potentially with the appended counter, so
// we parse that to reconstruct the $seen_ids array.
foreach ($_POST['ajax_html_ids'] as $seen_id) {
$ajax_html_ids = explode(' ', $_POST['ajax_html_ids']);
foreach ($ajax_html_ids as $seen_id) {
// We rely on '--' being used solely for separating a base id from the
// counter, which this function ensures when returning an id.
$parts = explode('--', $seen_id, 2);

View File

@ -284,10 +284,13 @@ Drupal.ajax.prototype.beforeSerialize = function (element, options) {
// Prevent duplicate HTML ids in the returned markup.
// @see drupal_html_id()
options.data['ajax_html_ids[]'] = [];
$('[id]').each(function () {
options.data['ajax_html_ids[]'].push(this.id);
});
var ids = document.querySelectorAll('[id]');
var ajaxHtmlIds = [];
for (var i = 0, il = ids.length; i < il; i++) {
ajaxHtmlIds.push(ids[i].id);
}
// Join IDs to minimize request size.
options.data.ajax_html_ids = ajaxHtmlIds.join(' ');
// Allow Drupal to return new JavaScript and CSS files to load without
// returning the ones already loaded.

View File

@ -1284,9 +1284,12 @@ abstract class WebTestBase extends TestBase {
$extra_post .= '&' . urlencode($key) . '=' . urlencode($value);
}
}
$ajax_html_ids = array();
foreach ($this->xpath('//*[@id]') as $element) {
$id = (string) $element['id'];
$extra_post .= '&' . urlencode('ajax_html_ids[]') . '=' . urlencode($id);
$ajax_html_ids[] = (string) $element['id'];
}
if (!empty($ajax_html_ids)) {
$extra_post .= '&' . urlencode('ajax_html_ids') . '=' . urlencode(implode(' ', $ajax_html_ids));
}
if (isset($drupal_settings['ajaxPageState'])) {
$extra_post .= '&' . urlencode('ajax_page_state[theme]') . '=' . urlencode($drupal_settings['ajaxPageState']['theme']);