summaryrefslogtreecommitdiffstats
path: root/dashboard/src/notifier
diff options
context:
space:
mode:
authorSawyer Bergeron <sbergeron@iol.unh.edu>2017-12-15 14:35:40 -0500
committerSawyer Bergeron <sbergeron@iol.unh.edu>2018-01-02 22:29:22 +0000
commitaebb690bd07460a9f61db36e46d79d502e7fc247 (patch)
tree908774bba0d7d0297f512ce9cf5eef7c5f439e0b /dashboard/src/notifier
parentac0ae9e3069e582fcaeaff35f28a5b45343bae84 (diff)
Implement Notification Framework with Initial Email Support
JIRA: None Notification/notifier objects are now created with title, content, sender, associated resource, and recipient and there is now support for emails at the very least to be sent as notifications. Change-Id: I456cf0e901d9a1e2a1e7d187dcc03d28fca003fb Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
Diffstat (limited to 'dashboard/src/notifier')
-rw-r--r--dashboard/src/notifier/__init__.py0
-rw-r--r--dashboard/src/notifier/admin.py14
-rw-r--r--dashboard/src/notifier/apps.py14
-rw-r--r--dashboard/src/notifier/dispatchers.py34
-rw-r--r--dashboard/src/notifier/migrations/0001_initial.py31
-rw-r--r--dashboard/src/notifier/migrations/__init__.py0
-rw-r--r--dashboard/src/notifier/models.py38
7 files changed, 131 insertions, 0 deletions
diff --git a/dashboard/src/notifier/__init__.py b/dashboard/src/notifier/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dashboard/src/notifier/__init__.py
diff --git a/dashboard/src/notifier/admin.py b/dashboard/src/notifier/admin.py
new file mode 100644
index 0000000..cfbe778
--- /dev/null
+++ b/dashboard/src/notifier/admin.py
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2016 Max Breitenfeldt and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from django.contrib import admin
+
+from notifier.models import *
+
+admin.site.register(Notifier)
diff --git a/dashboard/src/notifier/apps.py b/dashboard/src/notifier/apps.py
new file mode 100644
index 0000000..da5d3b0
--- /dev/null
+++ b/dashboard/src/notifier/apps.py
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2016 Max Breitenfeldt and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from django.apps import AppConfig
+
+
+class NotifierConfig(AppConfig):
+ name = 'notifier'
diff --git a/dashboard/src/notifier/dispatchers.py b/dashboard/src/notifier/dispatchers.py
new file mode 100644
index 0000000..64be2a5
--- /dev/null
+++ b/dashboard/src/notifier/dispatchers.py
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2016 Max Breitenfeldt and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from django.db.models.signals import pre_save
+from django.dispatch import receiver
+from django.contrib import messages
+from django.core.mail import send_mail
+
+class DispatchHandler():
+
+ @receiver(pre_save, sender='notifier.Notifier')
+ def dispatch(sender, instance, *args, **kwargs):
+ try:
+ msg_type = getattr(DispatchHandler, instance.message_type)
+ msg_type(instance)
+ except AttributeError:
+ instance.msg_sent = 'no dispatcher by given name exists: sending by email'
+ email(instance)
+
+ def email(instance):
+ if instance.msg_sent != 'no dispatcher by given name exists: sending by email':
+ instance.msg_sent = 'by email'
+ send_mail(instance.title,instance.content +
+ '\n\n This message pertains to the following resource: ' +
+ instance.resource.name,instance.sender,[instance.user.email_addr], fail_silently=False)
+
+ def webnotification(instance):
+ instance.msg_sent='by web notification'
diff --git a/dashboard/src/notifier/migrations/0001_initial.py b/dashboard/src/notifier/migrations/0001_initial.py
new file mode 100644
index 0000000..78d2bad
--- /dev/null
+++ b/dashboard/src/notifier/migrations/0001_initial.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10 on 2017-12-14 21:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import fernet_fields.fields
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('account', '0002_userprofile_email_addr'),
+ ('dashboard', '0002_auto_20170505_0815'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Notifier',
+ fields=[
+ ('id', models.AutoField(primary_key=True, serialize=False)),
+ ('title', models.CharField(max_length=240)),
+ ('content', fernet_fields.fields.EncryptedTextField()),
+ ('sender', models.CharField(default='unknown', max_length=240)),
+ ('message_type', models.CharField(choices=[('email', 'Email'), ('webnotification', 'Web Notification')], default='email', max_length=240)),
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='account.UserProfile')),
+ ],
+ ),
+ ]
diff --git a/dashboard/src/notifier/migrations/__init__.py b/dashboard/src/notifier/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dashboard/src/notifier/migrations/__init__.py
diff --git a/dashboard/src/notifier/models.py b/dashboard/src/notifier/models.py
new file mode 100644
index 0000000..9ebc6fc
--- /dev/null
+++ b/dashboard/src/notifier/models.py
@@ -0,0 +1,38 @@
+##############################################################################
+# Copyright (c) 2016 Max Breitenfeldt and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from django.db import models
+from jira import JIRA, JIRAError
+from dashboard.models import Resource
+from booking.models import Booking
+from django.contrib.auth.models import User
+from account.models import UserProfile
+from django.contrib import messages
+from django.db.models.signals import pre_save
+from fernet_fields import EncryptedTextField
+
+class Notifier(models.Model):
+ id = models.AutoField(primary_key=True)
+ title = models.CharField(max_length=240)
+ content = EncryptedTextField()
+ user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, blank=True)
+ sender = models.CharField(max_length=240, default='unknown')
+ message_type = models.CharField(max_length=240, default='email', choices=(
+ ('email','Email'),
+ ('webnotification', 'Web Notification')))
+ msg_sent = ''
+
+ import notifier.dispatchers
+
+ def __str__(self):
+ return self.title
+
+ def getEmail(self):
+ return self.user.email_addr
+