Chris@14
|
1 <?php
|
Chris@14
|
2
|
Chris@14
|
3 namespace Drupal\Core\Messenger;
|
Chris@14
|
4
|
Chris@14
|
5 use Drupal\Component\Render\MarkupInterface;
|
Chris@14
|
6 use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
|
Chris@14
|
7 use Drupal\Core\Render\Markup;
|
Chris@14
|
8 use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
|
Chris@14
|
9
|
Chris@14
|
10 /**
|
Chris@14
|
11 * The messenger service.
|
Chris@14
|
12 */
|
Chris@14
|
13 class Messenger implements MessengerInterface {
|
Chris@14
|
14
|
Chris@14
|
15 /**
|
Chris@14
|
16 * The flash bag.
|
Chris@14
|
17 *
|
Chris@14
|
18 * @var \Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface
|
Chris@14
|
19 */
|
Chris@14
|
20 protected $flashBag;
|
Chris@14
|
21
|
Chris@14
|
22 /**
|
Chris@14
|
23 * The kill switch.
|
Chris@14
|
24 *
|
Chris@14
|
25 * @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
|
Chris@14
|
26 */
|
Chris@14
|
27 protected $killSwitch;
|
Chris@14
|
28
|
Chris@14
|
29 /**
|
Chris@14
|
30 * Messenger constructor.
|
Chris@14
|
31 *
|
Chris@14
|
32 * @param \Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface $flash_bag
|
Chris@14
|
33 * The flash bag.
|
Chris@14
|
34 * @param \Drupal\Core\PageCache\ResponsePolicy\KillSwitch $killSwitch
|
Chris@14
|
35 * The kill switch.
|
Chris@14
|
36 */
|
Chris@14
|
37 public function __construct(FlashBagInterface $flash_bag, KillSwitch $killSwitch) {
|
Chris@14
|
38 $this->flashBag = $flash_bag;
|
Chris@14
|
39 $this->killSwitch = $killSwitch;
|
Chris@14
|
40 }
|
Chris@14
|
41
|
Chris@14
|
42 /**
|
Chris@14
|
43 * {@inheritdoc}
|
Chris@14
|
44 */
|
Chris@14
|
45 public function addError($message, $repeat = FALSE) {
|
Chris@14
|
46 return $this->addMessage($message, static::TYPE_ERROR, $repeat);
|
Chris@14
|
47 }
|
Chris@14
|
48
|
Chris@14
|
49 /**
|
Chris@14
|
50 * {@inheritdoc}
|
Chris@14
|
51 */
|
Chris@14
|
52 public function addMessage($message, $type = self::TYPE_STATUS, $repeat = FALSE) {
|
Chris@14
|
53 if (!($message instanceof Markup) && $message instanceof MarkupInterface) {
|
Chris@14
|
54 $message = Markup::create((string) $message);
|
Chris@14
|
55 }
|
Chris@14
|
56
|
Chris@14
|
57 // Do not use strict type checking so that equivalent string and
|
Chris@14
|
58 // MarkupInterface objects are detected.
|
Chris@14
|
59 if ($repeat || !in_array($message, $this->flashBag->peek($type))) {
|
Chris@14
|
60 $this->flashBag->add($type, $message);
|
Chris@14
|
61 }
|
Chris@14
|
62
|
Chris@14
|
63 // Mark this page as being uncacheable.
|
Chris@14
|
64 $this->killSwitch->trigger();
|
Chris@14
|
65
|
Chris@14
|
66 return $this;
|
Chris@14
|
67 }
|
Chris@14
|
68
|
Chris@14
|
69 /**
|
Chris@14
|
70 * {@inheritdoc}
|
Chris@14
|
71 */
|
Chris@14
|
72 public function addStatus($message, $repeat = FALSE) {
|
Chris@14
|
73 return $this->addMessage($message, static::TYPE_STATUS, $repeat);
|
Chris@14
|
74 }
|
Chris@14
|
75
|
Chris@14
|
76 /**
|
Chris@14
|
77 * {@inheritdoc}
|
Chris@14
|
78 */
|
Chris@14
|
79 public function addWarning($message, $repeat = FALSE) {
|
Chris@14
|
80 return $this->addMessage($message, static::TYPE_WARNING, $repeat);
|
Chris@14
|
81 }
|
Chris@14
|
82
|
Chris@14
|
83 /**
|
Chris@14
|
84 * {@inheritdoc}
|
Chris@14
|
85 */
|
Chris@14
|
86 public function all() {
|
Chris@14
|
87 return $this->flashBag->peekAll();
|
Chris@14
|
88 }
|
Chris@14
|
89
|
Chris@14
|
90 /**
|
Chris@14
|
91 * {@inheritdoc}
|
Chris@14
|
92 */
|
Chris@14
|
93 public function deleteAll() {
|
Chris@14
|
94 return $this->flashBag->clear();
|
Chris@14
|
95 }
|
Chris@14
|
96
|
Chris@14
|
97 /**
|
Chris@14
|
98 * {@inheritdoc}
|
Chris@14
|
99 */
|
Chris@14
|
100 public function deleteByType($type) {
|
Chris@14
|
101 // Flash bag gets and clears flash messages from the stack.
|
Chris@14
|
102 return $this->flashBag->get($type);
|
Chris@14
|
103 }
|
Chris@14
|
104
|
Chris@14
|
105 /**
|
Chris@14
|
106 * {@inheritdoc}
|
Chris@14
|
107 */
|
Chris@14
|
108 public function messagesByType($type) {
|
Chris@14
|
109 return $this->flashBag->peek($type);
|
Chris@14
|
110 }
|
Chris@14
|
111
|
Chris@14
|
112 }
|