diff options
-rw-r--r-- | phpBB/adm/style/ajax.js | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js index 42dcbe6de8..21cc22c6c6 100644 --- a/phpBB/adm/style/ajax.js +++ b/phpBB/adm/style/ajax.js @@ -74,15 +74,16 @@ function submitPermissions() { $.each(fieldsetList, function (key, value) { if (key % 5 === 0) { - formDataSets[Math.floor(key / 5)] = $form.find('fieldset#' + value.id + ' input').serialize(); + formDataSets[Math.floor(key / 5)] = $form.find('fieldset#' + value.id).serialize(); } else { - formDataSets[Math.floor(key / 5)] += '&' + $form.find('fieldset#' + value.id + ' input').serialize(); + formDataSets[Math.floor(key / 5)] += '&' + $form.find('fieldset#' + value.id).serialize(); } }); // Set proper start values for handling refresh of page var permissionSubmitSize = formDataSets.length, permissionRequestCount = 0, + forumIds = [], permissionSubmitFailed = false; /** @@ -98,6 +99,19 @@ function submitPermissions() { phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); permissionSubmitFailed = true; } else if (!permissionSubmitFailed && res.S_USER_NOTICE) { + // Fill list of selected forums + if (typeof res.REFRESH_DATA !== 'undefined') { + $.each(res.REFRESH_DATA.url.split('&'), function (key, value){ + var forumIdMatch = value.match(/^forum_id\[\]=([0-9]+)$/); + if (forumIdMatch !== null) { + forumIds.push(forumIdMatch[1]); + // Remove added forum IDs from refresh URL + res.REFRESH_DATA.url = res.REFRESH_DATA.url.replace('&' + forumIdMatch[0], ''); + } + }); + } + + // Display success message at the end of submitting the form if (permissionRequestCount >= permissionSubmitSize) { var $alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); // Do not allow closing alert @@ -106,7 +120,15 @@ function submitPermissions() { if (typeof res.REFRESH_DATA !== 'undefined') { setTimeout(function () { - window.location = res.REFRESH_DATA.url; + // Create forum to submit using POST. This will prevent + // exceeding the maximum length of URLs + var form = '<form action="' + res.REFRESH_DATA.url + '" method="post">'; + $.each(forumIds, function (key, value) { + form += '<input type="text" name="forum_id[]" value="' + value + '" />'; + }); + form += '</form>'; + $form = $(form); + $('body').append($form); // Hide the alert even if we refresh the page, in case the user // presses the back button. @@ -115,12 +137,16 @@ function submitPermissions() { $alert.hide(); } }); + + // Submit form + $form.submit(); }, res.REFRESH_DATA.time * 1000); // Server specifies time in seconds } } } } + // Create AJAX request for each form data set $.each(formDataSets, function (key, formData) { $.ajax({ url: $form.action, |