Version 1
[yaffs-website] / web / core / modules / system / src / Theme / BatchNegotiator.php
1 <?php
2
3 namespace Drupal\system\Theme;
4
5 use Drupal\Core\Batch\BatchStorageInterface;
6 use Drupal\Core\Routing\RouteMatchInterface;
7 use Drupal\Core\Theme\ThemeNegotiatorInterface;
8 use Symfony\Component\HttpFoundation\RequestStack;
9
10 /**
11  * Sets the active theme for the batch page.
12  */
13 class BatchNegotiator implements ThemeNegotiatorInterface {
14
15   /**
16    * The batch storage.
17    *
18    * @var \Drupal\Core\Batch\BatchStorageInterface
19    */
20   protected $batchStorage;
21
22   /**
23    * The request stack.
24    *
25    * @var \Symfony\Component\HttpFoundation\RequestStack
26    */
27   protected $requestStack;
28
29   /**
30    * Constructs a BatchNegotiator.
31    *
32    * @param \Drupal\Core\Batch\BatchStorageInterface $batch_storage
33    *   The batch storage.
34    * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
35    *   The request stack used to retrieve the current request.
36    */
37   public function __construct(BatchStorageInterface $batch_storage, RequestStack $request_stack) {
38     $this->batchStorage = $batch_storage;
39     $this->requestStack = $request_stack;
40   }
41
42   /**
43    * {@inheritdoc}
44    */
45   public function applies(RouteMatchInterface $route_match) {
46     return $route_match->getRouteName() == 'system.batch_page';
47   }
48
49   /**
50    * {@inheritdoc}
51    */
52   public function determineActiveTheme(RouteMatchInterface $route_match) {
53     // Retrieve the current state of the batch.
54     $request = $this->requestStack->getCurrentRequest();
55     $batch = &batch_get();
56     if (!$batch && $request->request->has('id')) {
57       $batch = $this->batchStorage->load($request->request->get('id'));
58     }
59     // Use the same theme as the page that started the batch.
60     if (!empty($batch['theme'])) {
61       return $batch['theme'];
62     }
63   }
64
65 }