4a4d15d8971b2f3d7735fdef6048f31c8a6604b0
[yaffs-website] / web / core / modules / system / tests / modules / render_placeholder_message_test / src / RenderPlaceholderMessageTestController.php
1 <?php
2
3 namespace Drupal\render_placeholder_message_test;
4
5 use Drupal\Core\Render\RenderContext;
6 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
7 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
8
9 class RenderPlaceholderMessageTestController implements ContainerAwareInterface {
10
11   use ContainerAwareTrait;
12
13   /**
14    * @return array
15    */
16   public function messagesPlaceholderFirst() {
17     return $this->build([
18       '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
19       '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
20       '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
21     ]);
22   }
23
24   /**
25    * @return array
26    */
27   public function messagesPlaceholderMiddle() {
28     return $this->build([
29       '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
30       '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
31       '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
32     ]);
33   }
34
35   /**
36    * @return array
37    */
38   public function messagesPlaceholderLast() {
39     return $this->build([
40       '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
41       '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
42       '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
43     ]);
44   }
45
46   /**
47    * @return array
48    */
49   public function queuedMessages() {
50     return ['#type' => 'status_messages'];
51   }
52
53   /**
54    * @return array
55    */
56   protected function build(array $placeholder_order) {
57     $build = [];
58     $build['messages'] = ['#type' => 'status_messages'];
59     $build['p1'] = [
60       '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P1']],
61       '#create_placeholder' => TRUE,
62     ];
63     $build['p2'] = [
64       '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P2']],
65       '#create_placeholder' => TRUE,
66     ];
67
68     /** @var \Drupal\Core\Render\RendererInterface $renderer */
69     $renderer = $this->container->get('renderer');
70     $renderer->executeInRenderContext(new RenderContext(), function () use (&$build, $renderer) {
71       return $renderer->render($build, FALSE);
72     });
73
74     $reordered = [];
75     foreach ($placeholder_order as $placeholder) {
76       $reordered[$placeholder] = $build['#attached']['placeholders'][$placeholder];
77     }
78     $build['#attached']['placeholders'] = $reordered;
79
80     return $build;
81   }
82
83   /**
84    * #lazy_builder callback; sets and prints a message.
85    *
86    * @param string $message
87    *   The message to send.
88    *
89    * @return array
90    *   A renderable array containing the message.
91    */
92   public static function setAndLogMessage($message) {
93     // Set message.
94     drupal_set_message($message);
95
96     // Print which message is expected.
97     return ['#markup' => '<p class="logged-message">Message: ' . $message . '</p>'];
98   }
99
100 }