Version 1
[yaffs-website] / web / core / modules / contact / src / Controller / ContactController.php
diff --git a/web/core/modules/contact/src/Controller/ContactController.php b/web/core/modules/contact/src/Controller/ContactController.php
new file mode 100644 (file)
index 0000000..b8b69d5
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+
+namespace Drupal\contact\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\contact\ContactFormInterface;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\user\UserInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+/**
+ * Controller routines for contact routes.
+ */
+class ContactController extends ControllerBase {
+
+  /**
+   * The renderer.
+   *
+   * @var \Drupal\Core\Render\RendererInterface
+   */
+  protected $renderer;
+
+  /**
+   * Constructs a ContactController object.
+   *
+   * @param \Drupal\Core\Render\RendererInterface $renderer
+   *   The renderer.
+   */
+  public function __construct(RendererInterface $renderer) {
+    $this->renderer = $renderer;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('renderer')
+    );
+  }
+
+  /**
+   * Presents the site-wide contact form.
+   *
+   * @param \Drupal\contact\ContactFormInterface $contact_form
+   *   The contact form to use.
+   *
+   * @return array
+   *   The form as render array as expected by drupal_render().
+   *
+   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+   *   Exception is thrown when user tries to access non existing default
+   *   contact form.
+   */
+  public function contactSitePage(ContactFormInterface $contact_form = NULL) {
+    $config = $this->config('contact.settings');
+
+    // Use the default form if no form has been passed.
+    if (empty($contact_form)) {
+      $contact_form = $this->entityManager()
+        ->getStorage('contact_form')
+        ->load($config->get('default_form'));
+      // If there are no forms, do not display the form.
+      if (empty($contact_form)) {
+        if ($this->currentUser()->hasPermission('administer contact forms')) {
+          drupal_set_message($this->t('The contact form has not been configured. <a href=":add">Add one or more forms</a> .', [
+            ':add' => $this->url('contact.form_add')]), 'error');
+          return [];
+        }
+        else {
+          throw new NotFoundHttpException();
+        }
+      }
+    }
+
+    $message = $this->entityManager()
+      ->getStorage('contact_message')
+      ->create([
+        'contact_form' => $contact_form->id(),
+      ]);
+
+    $form = $this->entityFormBuilder()->getForm($message);
+    $form['#title'] = $contact_form->label();
+    $form['#cache']['contexts'][] = 'user.permissions';
+    $this->renderer->addCacheableDependency($form, $config);
+    return $form;
+  }
+
+  /**
+   * Form constructor for the personal contact form.
+   *
+   * @param \Drupal\user\UserInterface $user
+   *   The account for which a personal contact form should be generated.
+   *
+   * @return array
+   *   The personal contact form as render array as expected by drupal_render().
+   *
+   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+   *   Exception is thrown when user tries to access a contact form for a
+   *   user who does not have an email address configured.
+   */
+  public function contactPersonalPage(UserInterface $user) {
+    // Do not continue if the user does not have an email address configured.
+    if (!$user->getEmail()) {
+      throw new NotFoundHttpException();
+    }
+
+    $message = $this->entityManager()->getStorage('contact_message')->create([
+      'contact_form' => 'personal',
+      'recipient' => $user->id(),
+    ]);
+
+    $form = $this->entityFormBuilder()->getForm($message);
+    $form['#title'] = $this->t('Contact @username', ['@username' => $user->getDisplayName()]);
+    $form['#cache']['contexts'][] = 'user.permissions';
+    return $form;
+  }
+
+}