From 386caac193de2d62b5964a0a7d0500e8843aee06 Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Mon, 23 Jul 2018 17:28:45 +0100
Subject: [PATCH] Add the messaging adaptor for the django messages

---
 opentech/apply/activity/messaging.py            | 17 ++++++++++++++---
 opentech/apply/funds/views.py                   |  1 +
 .../src/sass/apply/components/_messages.scss    | 11 +++++++++++
 opentech/static_src/src/sass/apply/main.scss    |  1 +
 opentech/templates/base-apply.html              |  8 ++++++++
 5 files changed, 35 insertions(+), 3 deletions(-)
 create mode 100644 opentech/static_src/src/sass/apply/components/_messages.scss

diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index 5e0f88023..580b98fa1 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -40,6 +40,14 @@ class AdapterBase:
         raise NotImplementedError()
 
 
+class MessageAdapter(AdapterBase):
+    messages = {
+        enum: enum.value
+        for enum in MESSAGES.__members__.values()
+    }
+
+    def send_message(self, message, **kwargs):
+        messages.add_message(kwargs['request'], messages.INFO, message)
 
 
 class ActivityAdapter(AdapterBase):
@@ -75,10 +83,13 @@ class ActivityAdapter(AdapterBase):
 
 
 class MessengerBackend:
-    adapters = [ActivityAdapter()]
+    adapters = [
+        ActivityAdapter(),
+        MessageAdapter(),
+    ]
 
-    def __call__(self, message_type, user, submission, **kwargs):
-        return self.send(message_type, user=user, submission=submission, **kwargs)
+    def __call__(self, message_type, request, user, submission, **kwargs):
+        return self.send(message_type, request=request, user=user, submission=submission, **kwargs)
 
     def send(self, message_type, **kwargs):
         for adapter in self.adapters:
diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index 07eff4186..41c970d7b 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -100,6 +100,7 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView):
         response = super().form_valid(form)
         messenger(
             MESSAGES.UPDATE_LEAD,
+            request=self.request,
             user=self.request.user,
             submission=form.instance,
             old=old,
diff --git a/opentech/static_src/src/sass/apply/components/_messages.scss b/opentech/static_src/src/sass/apply/components/_messages.scss
new file mode 100644
index 000000000..d4432782c
--- /dev/null
+++ b/opentech/static_src/src/sass/apply/components/_messages.scss
@@ -0,0 +1,11 @@
+.messages {
+
+    &__text {
+        padding: 10px;
+
+        &-info {
+            background: $color--pastel-green;
+            border: solid 1px darken($color--pastel-green, 20%);
+        }
+    }
+}
diff --git a/opentech/static_src/src/sass/apply/main.scss b/opentech/static_src/src/sass/apply/main.scss
index 3f122dd07..ee6fea8b3 100755
--- a/opentech/static_src/src/sass/apply/main.scss
+++ b/opentech/static_src/src/sass/apply/main.scss
@@ -44,6 +44,7 @@
 @import 'components/traffic-light';
 @import 'components/wrapper';
 @import 'components/revisions';
+@import 'components/messages';
 
 // Layout
 @import 'layout/header';
diff --git a/opentech/templates/base-apply.html b/opentech/templates/base-apply.html
index a2f3f51fd..4fabf4f68 100644
--- a/opentech/templates/base-apply.html
+++ b/opentech/templates/base-apply.html
@@ -33,6 +33,14 @@
     <body class="{% block body_class %}light-grey-bg template-{{ page.get_verbose_name|slugify }}{% endblock %}">
         {% hijack_notification %}
 
+        {% if messages %}
+            <ul class="messages">
+                {% for message in messages %}
+                    <li class="messages__text{% if message.tags %} messages__text-{{ message.tags }}"{% endif %}>{{ message }}</li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+
         {% if GOOGLE_TAG_MANAGER_ID %}
             {# To enable GTM code you need to specify GOOGLE_TAG_MANAGER_ID in production.py or in local.py #}
             <!-- Google Tag Manager (noscript) -->
-- 
GitLab