annotate core/rebuild.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /**
Chris@0 4 * @file
Chris@0 5 * Rebuilds all Drupal caches even when Drupal itself does not work.
Chris@0 6 *
Chris@0 7 * Needs a token query argument which can be calculated using the
Chris@0 8 * scripts/rebuild_token_calculator.sh script.
Chris@0 9 *
Chris@0 10 * @see drupal_rebuild()
Chris@0 11 */
Chris@0 12
Chris@0 13 use Drupal\Component\Utility\Crypt;
Chris@0 14 use Drupal\Core\DrupalKernel;
Chris@0 15 use Drupal\Core\Site\Settings;
Chris@0 16 use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
Chris@0 17 use Symfony\Component\HttpFoundation\Request;
Chris@0 18 use Symfony\Component\HttpFoundation\Response;
Chris@0 19
Chris@0 20 // Change the directory to the Drupal root.
Chris@0 21 chdir('..');
Chris@0 22
Chris@0 23 $autoloader = require_once __DIR__ . '/../autoload.php';
Chris@0 24 require_once __DIR__ . '/includes/utility.inc';
Chris@0 25
Chris@0 26 $request = Request::createFromGlobals();
Chris@0 27 // Manually resemble early bootstrap of DrupalKernel::boot().
Chris@0 28 require_once __DIR__ . '/includes/bootstrap.inc';
Chris@0 29 DrupalKernel::bootEnvironment();
Chris@0 30
Chris@0 31 try {
Chris@0 32 Settings::initialize(dirname(__DIR__), DrupalKernel::findSitePath($request), $autoloader);
Chris@0 33 }
Chris@0 34 catch (HttpExceptionInterface $e) {
Chris@0 35 $response = new Response('', $e->getStatusCode());
Chris@0 36 $response->prepare($request)->send();
Chris@0 37 exit;
Chris@0 38 }
Chris@0 39
Chris@0 40 if (Settings::get('rebuild_access', FALSE) ||
Chris@0 41 ($request->query->get('token') && $request->query->get('timestamp') &&
Chris@0 42 ((REQUEST_TIME - $request->query->get('timestamp')) < 300) &&
Chris@0 43 Crypt::hashEquals(Crypt::hmacBase64($request->query->get('timestamp'), Settings::get('hash_salt')), $request->query->get('token'))
Chris@0 44 )) {
Chris@0 45 // Clear user cache for all major platforms.
Chris@0 46 $user_caches = [
Chris@0 47 'apcu_clear_cache',
Chris@0 48 'wincache_ucache_clear',
Chris@0 49 'xcache_clear_cache',
Chris@0 50 ];
Chris@0 51 array_map('call_user_func', array_filter($user_caches, 'is_callable'));
Chris@0 52
Chris@0 53 drupal_rebuild($autoloader, $request);
Chris@17 54 \Drupal::messenger()->addStatus('Cache rebuild complete.');
Chris@0 55 }
Chris@0 56 $base_path = dirname(dirname($request->getBaseUrl()));
Chris@18 57 header('Location: ' . $request->getSchemeAndHttpHost() . $base_path);