diff --git a/core/authorize.php b/core/authorize.php index f347ba5..cd2eb79 100644 --- a/core/authorize.php +++ b/core/authorize.php @@ -20,6 +20,8 @@ * @link authorize Authorized operation helper functions @endlink */ +use Symfony\Component\HttpFoundation\Request; + // Change the directory to the Drupal root. chdir('..'); @@ -67,6 +69,10 @@ function authorize_access_allowed() { // variables, however, so we have access to the class autoloader. drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); +// A request object from the HTTPFoundation to tell us about the request. +$request = Request::createFromGlobals(); +Drupal::getContainer()->set('request', $request); + // This must go after drupal_bootstrap(), which unsets globals! global $conf; @@ -133,7 +139,7 @@ function authorize_access_allowed() { } // If a batch is running, let it run. elseif (isset($_GET['batch'])) { - $output = _batch_page(); + $output = _batch_page($request); } else { if (empty($_SESSION['authorize_operation']) || empty($_SESSION['authorize_filetransfer_info'])) { diff --git a/core/includes/batch.inc b/core/includes/batch.inc index 27fb632..907c3f9 100644 --- a/core/includes/batch.inc +++ b/core/includes/batch.inc @@ -16,23 +16,27 @@ use Drupal\Core\Batch\Percentage; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; /** * Renders the batch processing page based on the current state of the batch. * + * @param \Symfony\Component\HttpFoundation\Request $request + * The current request object. + * * @see _batch_shutdown() */ -function _batch_page() { +function _batch_page(Request $request) { $batch = &batch_get(); - if (!isset($_REQUEST['id'])) { + if (!($request_id = $request->query->get('id'))) { return FALSE; } // Retrieve the current state of the batch. if (!$batch) { - $batch = Drupal::service('batch.storage')->load($_REQUEST['id']); + $batch = Drupal::service('batch.storage')->load($request_id); if (!$batch) { drupal_set_message(t('No active batch.'), 'error'); return new RedirectResponse(url('', array('absolute' => TRUE))); @@ -51,7 +55,7 @@ function _batch_page() { } } - $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : ''; + $op = $request->query->get('op', ''); $output = NULL; switch ($op) { case 'start': diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 77771d8..fb3d2d4 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -639,7 +639,7 @@ function install_run_task($task, &$install_state) { // any output from the batch process, until the task is complete. elseif ($current_batch == $function) { include_once __DIR__ . '/batch.inc'; - $output = _batch_page(); + $output = _batch_page(Drupal::request()); // Because Batch API now returns a JSON response for intermediary steps, // but the installer doesn't handle Response objects yet, just send the // output here and emulate the old model. diff --git a/core/modules/system/lib/Drupal/system/Controller/BatchController.php b/core/modules/system/lib/Drupal/system/Controller/BatchController.php new file mode 100644 index 0000000..53e8823 --- /dev/null +++ b/core/modules/system/lib/Drupal/system/Controller/BatchController.php @@ -0,0 +1,48 @@ + 'system_batch_page', - 'access callback' => TRUE, + 'route_name' => 'system_batch_page', 'theme callback' => '_system_batch_theme', 'type' => MENU_CALLBACK, - 'file' => 'system.admin.inc', ); // Localize date formats. diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml index 45ce1e5..0eb4e10 100644 --- a/core/modules/system/system.routing.yml +++ b/core/modules/system/system.routing.yml @@ -157,3 +157,10 @@ system_theme_settings_global: _form: '\Drupal\system\Form\ThemeSettingsForm' requirements: _permission: 'administer themes' + +system_batch_page: + pattern: '/batch' + defaults: + _controller: '\Drupal\system\Controller\BatchController::batchPage' + requirements: + _access: 'TRUE' diff --git a/core/update.php b/core/update.php index b73e3ce..fe99669 100644 --- a/core/update.php +++ b/core/update.php @@ -412,6 +412,8 @@ function update_check_requirements($skip_warnings = FALSE) { } } +// @todo Refactor this. + // Some unavoidable errors happen because the database is not yet up-to-date. // Our custom error handler is not yet installed, so we just suppress them. ini_set('display_errors', FALSE); @@ -430,11 +432,8 @@ function update_check_requirements($skip_warnings = FALSE) { drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); // A request object from the HTTPFoundation to tell us about the request. -// @todo These two lines were copied from index.php which has its own todo about -// a change required here. Revisit this when that change has been made. $request = Request::createFromGlobals(); -drupal_container() - ->set('request', $request); +Drupal::getContainer()->set('request', $request); // There can be conflicting 'op' parameters because both update and batch use // this parameter name. We need the 'op' coming from a POST request to trump @@ -527,7 +526,7 @@ function update_check_requirements($skip_warnings = FALSE) { // Regular batch ops : defer to batch processing API. default: update_task_list('run'); - $output = _batch_page(); + $output = _batch_page($request); break; } }