diff --git a/config/settings/common.py b/config/settings/common.py
index 33cc399..b18098a 100644
--- a/config/settings/common.py
+++ b/config/settings/common.py
@@ -461,3 +461,8 @@ CORS_ORIGIN_WHITELIST = (
'vector.im',
'riot.im'
)
+
+MATRIX_USER=env('MATRIX_USERNAME')
+MATRIX_PASSWORD=env('MATRIX_PASSWORD')
+MATRIX_ROOM=env('MATRIX_ROOM')
+MSG_PREFIX = '[MH]'
diff --git a/config/settings/stage.py b/config/settings/stage.py
index 6ef74ac..fc60406 100644
--- a/config/settings/stage.py
+++ b/config/settings/stage.py
@@ -17,7 +17,7 @@ from .common import * # noqa
# See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key
# Raises ImproperlyConfigured exception if DJANGO_SECRET_KEY not in os.environ
SECRET_KEY = env('DJANGO_SECRET_KEY')
-
+SITE_ID = 2
# This ensures that Django will be able to detect a secure connection
# properly on Heroku.
diff --git a/env.example b/env.example
index 87a5eb1..8d7451e 100644
--- a/env.example
+++ b/env.example
@@ -51,3 +51,7 @@ GOCARDLESS_APP_ID=demo
GOCARDLESS_APP_SECRET=demo
GOCARDLESS_ACCESS_TOKEN=demo
GOCARDLESS_MERCHANT_ID=demo
+
+MATRIX_ROOM=fmCpNwqgIiuwATlcdw:matrix.org
+MATRIX_USERNAME=mhackspace
+MATRIX_PASSWORD=
diff --git a/mhackspace/base/models.py b/mhackspace/base/models.py
index adb810d..8f067e8 100644
--- a/mhackspace/base/models.py
+++ b/mhackspace/base/models.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
+from django.contrib.sites.models import Site
from django.db import models
from django.utils import timezone
@@ -8,9 +9,12 @@ from stdimage.utils import UploadToAutoSlugClassNameDir
from stdimage.validators import MinSizeValidator
from spirit.comment.models import Comment
+from wiki.models.article import ArticleRevision
# from django.contrib.auth.models import User
from django.core.mail import EmailMessage
from django.db.models.signals import post_save
+from mhackspace.base.tasks import matrix_message
+
class BannerImage(models.Model):
url = models.URLField()
@@ -65,6 +69,16 @@ def send_topic_update_email(sender, instance, **kwargs):
to=[user_email],
headers={'Reply-To': 'no-reply@maidstone-hackspace.org.uk'})
email.send()
+ matrix_message.delay('https://%s%s' % (
+ Site.objects.get_current().domain,
+ instance.topic.get_absolute_url()))
+def wiki_article_updated(sender, instance, **kwargs):
+ matrix_message.delay('https://%s%s' % (
+ Site.objects.get_current().domain,
+ instance.article.get_absolute_url()))
+
+
+post_save.connect(wiki_article_updated, sender=ArticleRevision)
post_save.connect(send_topic_update_email, sender=Comment)
diff --git a/mhackspace/base/tasks.py b/mhackspace/base/tasks.py
index 58f1aac..2a0898b 100644
--- a/mhackspace/base/tasks.py
+++ b/mhackspace/base/tasks.py
@@ -1,7 +1,50 @@
+import requests
from celery import shared_task
+from django.conf import settings
from mhackspace.feeds.helper import import_feeds
@shared_task
def update_homepage_feeds():
return import_feeds()
+
+matrix_url = "https://matrix.org/_matrix/client/r0"
+matrix_login_url = matrix_url + "/login"
+matrix_join_room_alias_url = matrix_url + "/join/{room}?access_token={access_token}"
+matrix_join_room_id_url = matrix_url + "rooms/%21{room}/join?access_token={access_token}"
+matrix_send_msg_url = matrix_url + "/rooms/%21{room}/send/m.room.message?access_token={access_token}"
+
+
+@shared_task
+def matrix_message(message):
+ # we dont rely on theses, so ignore if it goes wrong
+ # TODO at least log that something has gone wrong
+ try:
+ # login
+ details = {
+ "type":"m.login.password",
+ "user":settings.MATRIX_USER,
+ "password":settings.MATRIX_PASSWORD}
+ r0 = requests.post(matrix_login_url, json = details)
+ access_token = r0.json().get('access_token')
+
+ # join room by id
+ url_params = {
+ 'room': settings.MATRIX_ROOM,
+ 'access_token': access_token}
+ url = matrix_join_room_id_url.format(**url_params)
+ r1 = requests.post(url)
+
+ # send message
+ url_params = {
+ "room": settings.MATRIX_ROOM,
+ "access_token": access_token}
+ url = matrix_send_msg_url.format(**url_params)
+ details = {
+ "msgtype": "m.text",
+ "body": "%s %s" % (settings.MSG_PREFIX, message)}
+ r2 = requests.post(url, json=details)
+ except:
+ pass
+ return True
+
diff --git a/mhackspace/requests/admin.py b/mhackspace/requests/admin.py
new file mode 100644
index 0000000..946c28c
--- /dev/null
+++ b/mhackspace/requests/admin.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+from django.contrib import admin
+from django.db import models
+from django.contrib.admin import ModelAdmin
+from draceditor.widgets import AdminDraceditorWidget
+from draceditor.models import DraceditorField
+
+from mhackspace.requests.models import UserRequests
+
+
+@admin.register(UserRequests)
+class RequestsAdmin(ModelAdmin):
+ list_display = ('title', 'description', 'created_date')
+ # list_filter = ('author', 'categories', 'members_only')
+
+
diff --git a/mhackspace/requests/models.py b/mhackspace/requests/models.py
index 9370b5b..d3cf76f 100644
--- a/mhackspace/requests/models.py
+++ b/mhackspace/requests/models.py
@@ -3,6 +3,8 @@
from django.conf import settings
from django.db import models
from django.utils import timezone
+from django.db.models.signals import post_save
+from mhackspace.base.tasks import matrix_message
REQUEST_TYPES = (
@@ -40,3 +42,10 @@ class UserRequests(models.Model):
# class Meta:
# ordering = ('created_date',)
+
+
+def send_topic_update_email(sender, instance, **kwargs):
+ matrix_message.delay('[MH] New Request - %s' % instance.title)
+
+
+post_save.connect(send_topic_update_email, sender=UserRequests)
diff --git a/mhackspace/templates/base.html b/mhackspace/templates/base.html
index 69535ce..ce2cb7c 100644
--- a/mhackspace/templates/base.html
+++ b/mhackspace/templates/base.html
@@ -30,12 +30,19 @@
- {% block css %}
- {% endblock %}
- {% block head-extra %}{% endblock head-extra %}
+
+
+
+
+
+ {% block css %}{% endblock %}
+
+ {% block head-extra %}
+ {% endblock head-extra %}
+