Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\contact;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Entity\EntityInterface;
|
Chris@0
|
6 use Drupal\Core\Entity\EntityViewBuilder;
|
Chris@0
|
7 use Drupal\Core\Mail\MailFormatHelper;
|
Chris@0
|
8 use Drupal\Core\Render\Element;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Render controller for contact messages.
|
Chris@0
|
12 */
|
Chris@0
|
13 class MessageViewBuilder extends EntityViewBuilder {
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * {@inheritdoc}
|
Chris@0
|
17 */
|
Chris@0
|
18 protected function getBuildDefaults(EntityInterface $entity, $view_mode) {
|
Chris@0
|
19 $build = parent::getBuildDefaults($entity, $view_mode);
|
Chris@0
|
20 // The message fields are individually rendered into email templates, so
|
Chris@0
|
21 // the entity has no template itself.
|
Chris@0
|
22 unset($build['#theme']);
|
Chris@0
|
23 return $build;
|
Chris@0
|
24 }
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * {@inheritdoc}
|
Chris@0
|
28 */
|
Chris@0
|
29 public function view(EntityInterface $entity, $view_mode = 'full', $langcode = NULL) {
|
Chris@0
|
30 $build = parent::view($entity, $view_mode, $langcode);
|
Chris@0
|
31
|
Chris@0
|
32 if ($view_mode == 'mail') {
|
Chris@0
|
33 // Convert field labels into headings.
|
Chris@0
|
34 // @todo Improve \Drupal\Core\Mail\MailFormatHelper::htmlToText() to
|
Chris@0
|
35 // convert DIVs correctly.
|
Chris@0
|
36 foreach (Element::children($build) as $key) {
|
Chris@0
|
37 if (isset($build[$key]['#label_display']) && $build[$key]['#label_display'] == 'above') {
|
Chris@0
|
38 $build[$key] += ['#prefix' => ''];
|
Chris@0
|
39 $build[$key]['#prefix'] = $build[$key]['#title'] . ":\n";
|
Chris@0
|
40 $build[$key]['#label_display'] = 'hidden';
|
Chris@0
|
41 }
|
Chris@0
|
42 }
|
Chris@0
|
43 $build['#post_render'][] = function ($html, array $elements) {
|
Chris@0
|
44 return MailFormatHelper::htmlToText($html);
|
Chris@0
|
45 };
|
Chris@0
|
46 }
|
Chris@0
|
47 return $build;
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 }
|