Skip to content

Commit

Permalink
pulling in changes from chrisv2
Browse files Browse the repository at this point in the history
  • Loading branch information
rogersmark committed Dec 14, 2009
2 parents 974b523 + 6ec796c commit ff38851
Show file tree
Hide file tree
Showing 8 changed files with 441 additions and 31 deletions.
73 changes: 42 additions & 31 deletions djtracker/__init__.py
@@ -1,59 +1,70 @@
import datetime

from djtracker import models
from djtracker import models, utils

from django.contrib.auth.models import User
from django.contrib.comments.models import Comment
from django.core.mail import send_mail
from django.db.models.signals import post_save
from django.contrib.sites.models import Site
from django.conf import settings
from django.template import Context

def create_profile(sender, instance, created, **kwargs):
def create_profile(sender, instance, created, **kwargs):
if created:
profile = models.UserProfile()
profile.user = instance
profile.save()

def update_watchers(sender, instance, created, **kwargs):
comment = instance
def on_postsave_issue(sender, instance, created, **kwargs):
if not hasattr(instance, '_dont_notify_watchers'):
update_watchers(issue=instance, created=created)

def on_postsave_comment(sender, instance, created, **kwargs):
update_watchers(issue=instance.content_object, comment=instance, created=created)

def update_watchers(issue, created, comment=None):
site = Site.objects.get(id=settings.SITE_ID)
if comment.content_type.name == "issue":
users = comment.content_object.watched_by.all()
email_addresses = []
for x in users:
email_addresses.append(x.user.email)
if comment.content_object.assigned_to and comment.content_object.assigned_to.user.email not in email_addresses:
email_addresses.append(comment.content_object.assigned_to.user.email)
email_title = "DjTracker: [%s]: Issue #%s has been updated by %s" % (comment.content_object.project.slug,
comment.content_object.id, comment.user_name)
email_message = """
Hello,
This message is to inform you that the issue you are watching has
been updated. The update is as follows:
-------------------------------
%s
-------------------------------
You can view this issue as http://%s%s
Thanks,
DjTracker Administration
""" % (comment.comment, site,
comment.content_object.get_absolute_url())
send_mail(email_title, email_message, settings.ISSUE_ADDRESS,
email_addresses, fail_silently=True)
context = Context({'issue': issue, 'project': issue.project, 'site': site})

if comment:
# issue commented
context['comment'] = comment
context['user_name'] = comment.user_name
template = utils.MailTemplate('djtracker/mail/issue_commented.mail')
elif created:
template = utils.MailTemplate('djtracker/mail/issue_created.mail')
else:
template = utils.MailTemplate('djtracker/mail/issue_updated.mail')

# we send email to: all watchers, the creator and the current processor...
email_addresses = list(issue.watched_by.all().values_list('user__email', flat=True))
if issue.created_by:
email_addresses.append(issue.created_by.user.email)
if issue.assigned_to:
email_addresses.append(issue.assigned_to.user.email)
# make list unique
email_addresses = {}.fromkeys(email_addresses).keys()

# send mails seperately to protect privacy
for recipient in email_addresses:
msg = template.render_to_mail(context)
msg.from_address = settings.ISSUE_ADDRESS
msg.to = [recipient,]
msg.send()

def update_modified_time(sender, instance, created, **kwargs):
comment = instance
if comment.content_type.name == "issue":
issue = comment.content_object
issue.modified_date = datetime.datetime.now()
# hack to prevent additional mail when new comment is added
issue._dont_notify_watchers = True
issue.save()

post_save.connect(create_profile, sender=User)
post_save.connect(update_watchers, sender=Comment)
post_save.connect(on_postsave_comment, sender=Comment)
post_save.connect(on_postsave_issue, sender=models.Issue)
post_save.connect(update_modified_time, sender=Comment)

if not hasattr(settings, "WEB_SERVER"):
Expand Down
67 changes: 67 additions & 0 deletions djtracker/fixtures/testdata/00_test_users.json
@@ -0,0 +1,67 @@
[ { "fields" :
{ "date_joined" : "2009-12-08 03:56:19",
"email" : "admin@djtracker.corp",
"first_name" : "",
"groups" : [ ],
"is_active" : true,
"is_staff" : true,
"is_superuser" : true,
"last_login" : "2009-12-13 20:11:44",
"last_name" : "",
"password" : "",
"user_permissions" : [ ],
"username" : "admin"
},
"model" : "auth.user",
"pk" : 1
},
{ "fields" :
{ "date_joined" : "2009-12-13 20:26:17",
"email" : "creator@djtracker.corp",
"first_name" : "",
"groups" : [ ],
"is_active" : true,
"is_staff" : false,
"is_superuser" : false,
"last_login" : "2009-12-13 20:26:17",
"last_name" : "",
"password" : "",
"user_permissions" : [ ],
"username" : "creator"
},
"model" : "auth.user",
"pk" : 2
},
{ "fields" : { "date_joined" : "2009-12-13 20:26:36",
"email" : "processor@djtracker.corp",
"first_name" : "",
"groups" : [ ],
"is_active" : true,
"is_staff" : false,
"is_superuser" : false,
"last_login" : "2009-12-13 20:26:36",
"last_name" : "",
"password" : "",
"user_permissions" : [ ],
"username" : "processor"
},
"model" : "auth.user",
"pk" : 3
},
{ "fields" : { "date_joined" : "2009-12-13 20:26:36",
"email" : "watcher@djtracker.corp",
"first_name" : "",
"groups" : [ ],
"is_active" : true,
"is_staff" : false,
"is_superuser" : false,
"last_login" : "2009-12-13 20:26:36",
"last_name" : "",
"password" : "",
"user_permissions" : [ ],
"username" : "watcher"
},
"model" : "auth.user",
"pk" : 4
}
]
167 changes: 167 additions & 0 deletions djtracker/fixtures/testdata/01_test_config.json
@@ -0,0 +1,167 @@
[
{
"pk": 1,
"model": "djtracker.project",
"fields": {
"allow_anon_comment": false,
"modified_date": "2009-11-14 16:50:17",
"allow_authed_editing": true,
"groups_can_comment": [],
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in diam est. In id tortor vitae nulla iaculis imperdiet. Quisque scelerisque ipsum suscipit nibh scelerisque gravida. In sit amet dolor lectus. Vestibulum sit amet consectetur urna. Nam sit amet ligula ac turpis consequat dapibus sed et leo. Donec eget quam massa. Sed ac porta ante. In mi metus, rhoncus quis viverra in, vulputate eu erat. Aenean facilisis mauris nec lacus congue tempor. Vivamus facilisis, augue at imperdiet interdum, velit urna consequat nisi, sed tempus erat felis sed turpis. Suspendisse bibendum leo vel metus ultrices congue. In fringilla purus varius velit rutrum eget faucibus turpis blandit. Cras mauris metus, cursus et hendrerit id, rutrum at purus. Vestibulum accumsan tincidunt ante sed pretium. Phasellus nec mattis lacus.",
"groups_can_edit": [],
"users_can_comment": [],
"allow_authed_viewing": true,
"groups_can_view": [],
"name": "Default Project",
"users_can_edit": [],
"allow_authed_comment": true,
"users_can_view": [],
"created_date": "2009-11-14 16:50:17",
"active": true,
"allow_anon_viewing": true,
"slug": "default-project",
"allow_anon_editing": false
}
},
{
"pk": 1,
"model": "djtracker.milestone",
"fields": {
"modified_date": "2009-11-14 16:52:10",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in diam est. In id tortor vitae nulla iaculis imperdiet. Quisque scelerisque ipsum suscipit nibh scelerisque gravida. In sit amet dolor lectus. Vestibulum sit amet consectetur urna. Nam sit amet ligula ac turpis consequat dapibus sed et leo. Donec eget quam massa. Sed ac porta ante. In mi metus, rhoncus quis viverra in, vulputate eu erat. Aenean facilisis mauris nec lacus congue tempor. Vivamus facilisis, augue at imperdiet interdum, velit urna consequat nisi, sed tempus erat felis sed turpis. Suspendisse bibendum leo vel metus ultrices congue. In fringilla purus varius velit rutrum eget faucibus turpis blandit. Cras mauris metus, cursus et hendrerit id, rutrum at purus. Vestibulum accumsan tincidunt ante sed pretium. Phasellus nec mattis lacus.",
"project": 1,
"created_date": "2009-11-14 16:52:10",
"active": true,
"goal_date": "2009-11-24 16:52:08",
"slug": "default-milestone",
"name": "Default Milestone"
}
},
{
"pk": 1,
"model": "djtracker.component",
"fields": {
"modified_date": "2009-11-14 16:52:19",
"name": "Default Component",
"project": 1,
"created_date": "2009-11-14 16:52:19",
"active": true,
"slug": "default-component"
}
},
{
"pk": 1,
"model": "djtracker.version",
"fields": {
"modified_date": "2009-11-14 16:52:41",
"name": "Default Version",
"project": 1,
"created_date": "2009-11-14 16:52:41",
"active": true,
"slug": "default-version"
}
},
{
"pk": 1,
"model": "djtracker.status",
"fields": {
"name": "Open",
"slug": "open"
}
},
{
"pk": 2,
"model": "djtracker.status",
"fields": {
"name": "Closed",
"slug": "closed"
}
},
{
"pk": 3,
"model": "djtracker.status",
"fields": {
"name": "Deferred",
"slug": "deferred"
}
},
{
"pk": 4,
"model": "djtracker.status",
"fields": {
"name": "Denied",
"slug": "denied"
}
},
{
"pk": 1,
"model": "djtracker.priority",
"fields": {
"name": "High",
"slug": "high"
}
},
{
"pk": 2,
"model": "djtracker.priority",
"fields": {
"name": "Normal",
"slug": "normal"
}
},
{
"pk": 3,
"model": "djtracker.priority",
"fields": {
"name": "Low",
"slug": "low"
}
},
{
"pk": 1,
"model": "djtracker.issuetype",
"fields": {
"name": "Bug",
"slug": "bug"
}
},
{
"pk": 2,
"model": "djtracker.issuetype",
"fields": {
"name": "Defect",
"slug": "defect"
}
},
{
"pk": 3,
"model": "djtracker.issuetype",
"fields": {
"name": "Feature Request",
"slug": "feature-request"
}
},
{
"pk": 1,
"model": "djtracker.issue",
"fields": {
"status": 1,
"priority": 2,
"name": "Test Issue",
"created_date": "2009-11-14 16:52:57",
"modified_date": "2009-11-14 16:52:57",
"assigned_to": 3,
"component": 1,
"created_by": 2,
"project": 1,
"version": 1,
"watched_by": [
4
],
"issue_type": 1,
"milestone": 1,
"active": true,
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in diam est. In id tortor vitae nulla iaculis imperdiet. Quisque scelerisque ipsum suscipit nibh scelerisque gravida. In sit amet dolor lectus. Vestibulum sit amet consectetur urna. Nam sit amet ligula ac turpis consequat dapibus sed et leo. Donec eget quam massa. Sed ac porta ante. In mi metus, rhoncus quis viverra in, vulputate eu erat. Aenean facilisis mauris nec lacus congue tempor. Vivamus facilisis, augue at imperdiet interdum, velit urna consequat nisi, sed tempus erat felis sed turpis. Suspendisse bibendum leo vel metus ultrices congue. In fringilla purus varius velit rutrum eget faucibus turpis blandit. Cras mauris metus, cursus et hendrerit id, rutrum at purus. Vestibulum accumsan tincidunt ante sed pretium. Phasellus nec mattis lacus."
}
}
]
16 changes: 16 additions & 0 deletions djtracker/templates/djtracker/mail/issue_commented.mail
@@ -0,0 +1,16 @@
{% block subject%}DjTracker: [{{project.slug}}]: New Comment on Issue #{{issue.id}} by {{user_name}}{% endblock %}

{% block body %}
Hello,
This message is to inform you that there's a new comment on an issue
you are watching:

--------------------------------------------------------------------
{{comment.comment}}
--------------------------------------------------------------------

You can view this issue as http://{{site}}{{issue.get_absolute_url}}

Thanks,
DjTracker Administration
{% endblock %}
20 changes: 20 additions & 0 deletions djtracker/templates/djtracker/mail/issue_created.mail
@@ -0,0 +1,20 @@
{% block subject%}DjTracker: [{{project.slug}}]: New Issue #{{issue.id}} submitted{% endblock %}

{% block body %}
Hello,
This message is to inform you that a new issue has been posted on a
project you are watching:

--------------------------------------------------------------------
Title: {{issue.name}}
Priority: {{issue.priority}}
Status: {{issue.status}}
Description:
{{issue.description}}
--------------------------------------------------------------------

You can view this issue as http://{{site}}{{issue.get_absolute_url}}

Thanks,
DjTracker Administration
{% endblock %}

0 comments on commit ff38851

Please sign in to comment.