Same filename and directory in other branches
- 8.9.x core/lib/Drupal/Core/Update/UpdateKernel.php
- 9 core/lib/Drupal/Core/Update/UpdateKernel.php
Namespace
Drupal\Core\Update
File
core/lib/Drupal/Core/Update/UpdateKernel.php
View source
<?php
namespace Drupal\Core\Update;
use Drupal\Core\DrupalKernel;
use Drupal\Core\Session\AnonymousUserSession;
use Drupal\Core\Site\Settings;
use Drupal\Core\StackMiddleware\ReverseProxyMiddleware;
use Drupal\Core\Routing\RouteObjectInterface;
use Symfony\Component\HttpFoundation\InputBag;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
class UpdateKernel extends DrupalKernel {
public function discoverServiceProviders() {
parent::discoverServiceProviders();
$this->serviceProviderClasses['app']['update_kernel'] = 'Drupal\\Core\\Update\\UpdateServiceProvider';
}
protected function initializeContainer() {
$this->containerNeedsRebuild = TRUE;
$container = parent::initializeContainer();
return $container;
}
protected function cacheDrupalContainer(array $container_definition) {
return FALSE;
}
public function handle(Request $request, $type = self::MAIN_REQUEST, $catch = TRUE) : Response {
try {
static::bootEnvironment();
$this
->initializeSettings($request);
ReverseProxyMiddleware::setSettingsOnRequest($request, Settings::getInstance());
$this
->boot();
$container = $this
->getContainer();
$request_stack = $container
->get('request_stack');
$request_stack
->push($request);
$this
->preHandle($request);
$this
->bootSession($request);
$result = $this
->handleRaw($request);
$this
->shutdownSession($request);
return $result;
} catch (\Exception $e) {
return $this
->handleException($e, $request, $type);
}
}
protected function handleRaw(Request $request) {
$container = $this
->getContainer();
$this
->handleAccess($request);
$controller_resolver = $container
->get('controller_resolver');
$db_update_controller = $controller_resolver
->getControllerFromDefinition('\\Drupal\\system\\Controller\\DbUpdateController::handle');
$this
->setupRequestMatch($request);
$argument_resolver = $container
->get('http_kernel.controller.argument_resolver');
$arguments = $argument_resolver
->getArguments($request, $db_update_controller);
return call_user_func_array($db_update_controller, $arguments);
}
protected function bootSession(Request $request) {
$container = $this
->getContainer();
$session = $container
->get('session');
$session
->start();
$request
->setSession($session);
}
protected function shutdownSession(Request $request) {
$request
->getSession()
->save();
}
protected function setupRequestMatch(Request $request) {
$path = $request
->getPathInfo();
$args = explode('/', ltrim($path, '/'));
$request->attributes
->set(RouteObjectInterface::ROUTE_NAME, 'system.db_update');
$request->attributes
->set(RouteObjectInterface::ROUTE_OBJECT, $this
->getContainer()
->get('router.route_provider')
->getRouteByName('system.db_update'));
$op = $args[0] ?: 'info';
$request->attributes
->set('op', $op);
$request->attributes
->set('_raw_variables', new InputBag([
'op' => $op,
]));
}
protected function handleAccess(Request $request) {
$authentication_manager = $this
->getContainer()
->get('authentication');
$account = $authentication_manager
->authenticate($request) ?: new AnonymousUserSession();
$current_user = $this
->getContainer()
->get('current_user');
$current_user
->setAccount($account);
$db_update_access = $this
->getContainer()
->get('access_check.db_update');
if (!Settings::get('update_free_access', FALSE) && !$db_update_access
->access($account)
->isAllowed()) {
throw new AccessDeniedHttpException('In order to run update.php you need to either have "Administer software updates" permission or have set $settings[\'update_free_access\'] in your settings.php.');
}
}
}
Classes
Name |
Description |
UpdateKernel |
Defines a kernel which is used primarily to run the update of Drupal. |