diff --git a/lang/en_utf8/moodle.php b/lang/en_utf8/moodle.php index 17f79aa23fe..35604f57d3d 100644 --- a/lang/en_utf8/moodle.php +++ b/lang/en_utf8/moodle.php @@ -1686,6 +1686,7 @@ within the course so that we can learn more about you: $a->profileurl'; $string['whattocallzip'] = 'What do you want to call the zip file?'; $string['whattodo'] = 'What to do'; +$string['windowclosing'] = 'This window should close automatically. If not, please close it now.'; $string['withchosenfiles'] = 'With chosen files'; $string['withoutuserdata'] = 'without user data'; $string['withselectedusers'] = 'With selected users...'; diff --git a/lib/javascript-static.js b/lib/javascript-static.js index 2e832727515..db921e740ee 100644 --- a/lib/javascript-static.js +++ b/lib/javascript-static.js @@ -731,4 +731,20 @@ collapsible_region.prototype.handle_animation_complete = function() { if (this.collapsed) { this.div.className += ' collapsed'; } +} + +/** Close the current browser window. */ +function close_window() { + window.close(); +} + +/** + * Close the current browser window, forcing the window/tab that opened this + * popup to reload itself. */ +function close_window_reloading_opener() { + if (window.opener) { + window.opener.location.reload(1); + close_window(); + // Intentionally, only try to close the window if there is some evidence we are in a popup. + } } \ No newline at end of file diff --git a/lib/weblib.php b/lib/weblib.php index 09786b657b9..16a8d152b7d 100644 --- a/lib/weblib.php +++ b/lib/weblib.php @@ -675,26 +675,31 @@ function close_window_button($name='closewindow', $return=false, $reloadopener = } /* - * Try and close the current window immediately using Javascript - * @param int $delay the delay in seconds before closing the window + * Try and close the current window using JavaScript, either immediately, or after a delay. + * @param integer $delay a delay in seconds before closing the window. Default 0. + * @param boolean $reloadopener if true, we will see if this window was a pop-up, and try + * to reload the parent window before this one closes. */ -function close_window($delay=0) { -?> - - -open_header_containers); + } + + if ($reloadopener) { + $function = 'close_window_reloading_opener'; + } else { + $function = 'close_window'; + } + echo '
' . get_string('windowclosing') . '
'; + print_delayed_js_call($delay, $function); + + print_footer('empty'); + exit; +} /** * Given an array of values, output the HTML for a select element with those options.