From e881031945dd2a8bb0707987775a4255018c4954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lie=20Bouttier?= Date: Sat, 16 Aug 2014 22:44:42 -0700 Subject: [PATCH] add subscriptions to projects & issues --- issue/migrations/0015_auto_20140817_0239.py | 26 ++++++++ issue/models.py | 6 ++ issue/templates/issue/issue.html | 14 +++++ issue/templates/issue/project.html | 7 ++- issue/urls.py | 4 ++ issue/views.py | 70 +++++++++++++++++++++ 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 issue/migrations/0015_auto_20140817_0239.py diff --git a/issue/migrations/0015_auto_20140817_0239.py b/issue/migrations/0015_auto_20140817_0239.py new file mode 100644 index 0000000..4d6b183 --- /dev/null +++ b/issue/migrations/0015_auto_20140817_0239.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('issue', '0014_auto_20140815_0517'), + ] + + operations = [ + migrations.AddField( + model_name='issue', + name='subscribers', + field=models.ManyToManyField(to='issue.User', blank=True, null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='project', + name='subscribers', + field=models.ManyToManyField(to='issue.User', blank=True, null=True), + preserve_default=True, + ), + ] diff --git a/issue/models.py b/issue/models.py index 81d37e4..bdfc688 100644 --- a/issue/models.py +++ b/issue/models.py @@ -51,6 +51,9 @@ class Project(models.Model): verbose_name="Do unregistered users have read access " "to this project?") + subscribers = models.ManyToManyField(User, blank=True, null=True, + related_name='subscribed_projects') + def grant_user(self, user): perm = ProjectPermission(project=self, manage_project_permission=True, @@ -157,6 +160,9 @@ class Issue(models.Model): assignee = models.ForeignKey(User, blank=True, null=True, related_name='+') + subscribers = models.ManyToManyField(User, blank=True, null=True, + related_name='subscribed_issues') + @staticmethod def next_id(project): diff --git a/issue/templates/issue/issue.html b/issue/templates/issue/issue.html index 4308412..3f42b05 100644 --- a/issue/templates/issue/issue.html +++ b/issue/templates/issue/issue.html @@ -179,6 +179,20 @@ No one assigned {% endif %} {% endcomment %} + {% if request.user.is_authenticated %} +
+
+ Notifications +
+
+ + {% if request.user in issue.subscribers.all %} +  Unsubscribe + {% else %} +  Subscribe + {% endif %} +
+ {% endif %} diff --git a/issue/templates/issue/project.html b/issue/templates/issue/project.html index 538be9b..8c9dd04 100644 --- a/issue/templates/issue/project.html +++ b/issue/templates/issue/project.html @@ -4,8 +4,13 @@ {% block page_title %}{{ project }}{% endblock %} {% block projectmenu %} -{% if perm.manage_project_permission or perm.modify_project or perm.delete_project or perm.create_project %} +{% if request.user.is_authenticated or perm.manage_project_permission or perm.modify_project or perm.delete_project or perm.create_project %} +{% if request.user in project.subscribers.all %} +
  • Unsubscribe
  • +{% else %} +
  • Subscribe
  • +{% endif %} {% if perm.manage_project_permission %}
  • Manage permissions
  • {% endif %} diff --git a/issue/urls.py b/issue/urls.py index 1ba30c9..89bb0ca 100644 --- a/issue/urls.py +++ b/issue/urls.py @@ -5,6 +5,8 @@ urlpatterns = [ url(r'^add$', 'issue.views.project_add', name='add-project'), url(r'^(?P[a-z0-9_-]+)/edit$', 'issue.views.project_edit', name='edit-project'), url(r'^(?P[a-z0-9_-]+)/delete$', 'issue.views.project_delete', name='delete-project'), + url(r'^(?P[a-z0-9_-]+)/subscribe$', 'issue.views.project_subscribe', name='subscribe-project'), + url(r'^(?P[a-z0-9_-]+)/unsubscribe$', 'issue.views.project_unsubscribe', name='unsubscribe-project'), url(r'^(?P[a-z0-9_-]+)/issues$', 'issue.views.issue_list', name='list-issue'), url(r'^(?P[a-z0-9_-]+)/issues/add$', 'issue.views.issue_edit', name='add-issue'), url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)$', 'issue.views.issue', name='show-issue'), @@ -15,6 +17,8 @@ urlpatterns = [ url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)/comments/(?P[0-9]+)/edit$', 'issue.views.issue_edit_comment', name='edit-comment'), url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)/comments/(?P[0-9]+)/delete$', 'issue.views.issue_delete_comment', name='delete-comment'), url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)/delete$', 'issue.views.issue_delete', name='delete-issue'), + url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)/subscribe$', 'issue.views.issue_subscribe', name='subscribe-issue'), + url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)/unsubscribe$', 'issue.views.issue_unsubscribe', name='unsubscribe-issue'), url(r'^(?P[a-z0-9_-]+)/issues/(?P[0-9]+)/add-label/(?P