diff options
Diffstat (limited to 'phpBB/adm')
-rw-r--r-- | phpBB/adm/style/acp_help_phpbb.html | 16 | ||||
-rw-r--r-- | phpBB/adm/style/admin.js | 7 | ||||
-rw-r--r-- | phpBB/adm/style/ajax.js | 99 |
3 files changed, 118 insertions, 4 deletions
diff --git a/phpBB/adm/style/acp_help_phpbb.html b/phpBB/adm/style/acp_help_phpbb.html index d2f5e76916..48a4595913 100644 --- a/phpBB/adm/style/acp_help_phpbb.html +++ b/phpBB/adm/style/acp_help_phpbb.html @@ -4,7 +4,7 @@ <h1>{L_ACP_HELP_PHPBB}</h1> -<form id="acp_board" method="post" action="{U_ACTION}"> +<form id="acp_help_phpbb" method="post" action="{U_ACTION}" data-ajax-action="{U_COLLECT_STATS}"> <div class="send-stats-row"> <!-- EVENT acp_help_phpbb_stats_before --> <div class="send-stats-tile"> @@ -12,9 +12,9 @@ <p>{L_EXPLAIN_SEND_STATISTICS}</p> <div class="send-stats-row"> <div class="send-stats-data-row send-stats-data-only-row"> - <a id="trigger-configlist" data-ajax="toggle_link" data-toggle-text="{L_HIDE_STATISTICS}"><span>{L_SHOW_STATISTICS}</span><i class="icon fa-angle-down"></i></a> + <a id="trigger-configlist" data-ajax="toggle_link" data-overlay="false" data-toggle-text="{L_HIDE_STATISTICS}"><span>{L_SHOW_STATISTICS}</span><i class="icon fa-angle-down"></i></a> </div> - <div class="send-stats-data-row send-stats-data-hidden"> + <div class="send-stats-data-row"> <div class="configlist" id="configlist"> <!-- BEGIN providers --> <fieldset> @@ -41,11 +41,21 @@ <!-- EVENT acp_help_phpbb_stats_after --> <fieldset> <p class="submit-buttons"> + <input type="hidden" name="systemdata" value="{RAW_DATA}" /> + <input type="hidden" name="help_send_statistics_time" value="{COLLECT_STATS_TIME}" /> <input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" /> </p> {S_FORM_TOKEN} </fieldset> </div> </form> +<form action="{U_COLLECT_STATS}" method="post" target="questionaire_result" id="questionnaire-form"> + <fieldset> + <p class="submit-buttons"> + <input type="hidden" name="systemdata" value="{RAW_DATA}" /> + <input class="button1" type="submit" id="submit_stats" name="submit" value="{L_SEND_STATISTICS}" /> + </p> + </fieldset> +</form> <!-- INCLUDE overall_footer.html --> diff --git a/phpBB/adm/style/admin.js b/phpBB/adm/style/admin.js index e42fdb380a..551c78a4a3 100644 --- a/phpBB/adm/style/admin.js +++ b/phpBB/adm/style/admin.js @@ -243,11 +243,16 @@ function parse_document(container) parse_document($('body')); - $('#trigger-configlist').on('click', function () { + $('#questionnaire-form').css('display', 'none'); + var $triggerConfiglist = $('#trigger-configlist'); + + $triggerConfiglist.on('click', function () { var $configlist = $('#configlist'); $configlist.closest('.send-stats-data-row').toggleClass('send-stats-data-hidden'); $configlist.closest('.send-stats-row').find('.send-stats-data-row:first-child').toggleClass('send-stats-data-only-row'); $(this).find('i').toggleClass('fa-angle-down fa-angle-up'); }); + + $('#configlist').closest('.send-stats-data-row').addClass('send-stats-data-hidden'); }); })(jQuery); diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js index 3c1c57505b..1d4e00dfa4 100644 --- a/phpBB/adm/style/ajax.js +++ b/phpBB/adm/style/ajax.js @@ -4,6 +4,101 @@ 'use strict'; + +phpbb.prepareSendStats = function () { + var $form = $('#acp_help_phpbb'); + var $dark = $('#darkenwrapper'); + var $loadingIndicator; + + $form.on('submit', function () { + var $this = $(this), + currentTime = Math.floor(new Date().getTime() / 1000), + statsTime = parseInt($this.find('input[name=help_send_statistics_time]').val(), 10); + + event.preventDefault(); + $this.unbind('submit'); + + // Skip ajax request if form is submitted too early or send stats + // checkbox is not checked + if (!$this.find('input[name=help_send_statistics]').is(':checked') || + statsTime > currentTime) { + $form.find('input[type=submit]').click(); + setTimeout(function () { + $form.find('input[type=submit]').click(); + }, 300); + return; + } + + /** + * Handler for AJAX errors + */ + function errorHandler(jqXHR, textStatus, errorThrown) { + if (typeof console !== 'undefined' && console.log) { + console.log('AJAX error. status: ' + textStatus + ', message: ' + errorThrown); + } + phpbb.clearLoadingTimeout(); + var errorText = ''; + + if (typeof errorThrown === 'string' && errorThrown.length > 0) { + errorText = errorThrown; + } else { + errorText = $dark.attr('data-ajax-error-text-' + textStatus); + if (typeof errorText !== 'string' || !errorText.length) { + errorText = $dark.attr('data-ajax-error-text'); + } + } + phpbb.alert($dark.attr('data-ajax-error-title'), errorText); + } + + /** + * This is a private function used to handle the callbacks, refreshes + * and alert. It calls the callback, refreshes the page if necessary, and + * displays an alert to the user and removes it after an amount of time. + * + * It cannot be called from outside this function, and is purely here to + * avoid repetition of code. + * + * @param {object} res The object sent back by the server. + */ + function returnHandler(res) { + phpbb.clearLoadingTimeout(); + + // If a confirmation is not required, display an alert and call the + // callbacks. + $dark.fadeOut(phpbb.alertTime); + + if ($loadingIndicator) { + $loadingIndicator.fadeOut(phpbb.alertTime); + } + + var $sendStatisticsSuccess = $('<input />', { + type: 'hidden', + name: 'send_statistics_response', + value: res + }); + $sendStatisticsSuccess.appendTo('p.submit-buttons'); + + // Finish actual form submission + $form.find('input[type=submit]').click(); + } + + $loadingIndicator = phpbb.loadingIndicator(); + + $.ajax({ + url: $this.attr('data-ajax-action').replace('&', '&'), + type: 'POST', + data: 'systemdata=' + $this.find('input[name=systemdata]').val(), + success: returnHandler, + error: errorHandler, + cache: false + }).always(function() { + if ($loadingIndicator && $loadingIndicator.is(':visible')) { + $loadingIndicator.fadeOut(phpbb.alertTime); + } + }); + }); +}; + /** * The following callbacks are for reording items. row_down * is triggered when an item is moved down, and row_up is triggered when @@ -225,6 +320,10 @@ $(function() { $(this).attr('data-clicked', true); }); } + + if ($('#acp_help_phpbb')) { + phpbb.prepareSendStats(); + } }); |