--- a/ForgeTracker/forgetracker/model/ticket.py +++ b/ForgeTracker/forgetracker/model/ticket.py @@ -13,7 +13,7 @@ from datetime import datetime from pyforge.model import Artifact, VersionedArtifact, Snapshot, Message, project_orm_session, Project -from pyforge.model import File, User, Feed, Thread, Post +from pyforge.model import File, User, Feed, Thread, Post, Notification from pyforge.lib import helpers as h common_suffix = tg.config.get('forgemail.domain', '.sourceforge.net') @@ -112,7 +112,6 @@ custom_fields = FieldProperty({str:None}) reported_by = RelationProperty(User, via='reported_by_id') - assigned_to = RelationProperty(User, via='assigned_to_id') def index(self): result = VersionedArtifact.index(self) @@ -132,6 +131,11 @@ if self.assigned_to: result['assigned_to_s'] = self.assigned_to.username return result + + @property + def assigned_to(self): + if self.assigned_to_id is None: return None + return User.query.get(_id=self.assigned_to_id) @property def email_address(self): @@ -158,18 +162,22 @@ if o != n: changes.append('Owner updated: %r => %r' % ( o and o.username, n and n.username)) + self.subscribe(user=n) if old.description != self.description: changes.append('Description updated:') changes.append(h.diff_text(old.description, self.description)) description = '<br>'.join(changes) + subject = 'Ticket %s modified' % self.ticket_num else: description = 'Ticket %s created: %s' % ( self.ticket_num, self.summary) + subject = 'Ticket %s created' % self.ticket_num + self.subscribe(user=self.reported_by) Thread(discussion_id=self.app_config.discussion_id, - artifact_id=self._id, + artifact_reference=self.dump_ref(), subject='#%s discussion' % self.ticket_num) - Feed.post(self, description) + Notification.post(artifact=self, topic='metadata', text=description, subject=subject) def url(self): return self.app_config.url() + str(self.ticket_num) + '/' @@ -251,63 +259,6 @@ if root is not None: root.recalculate_sums() - -# class Comment(Message): - -# class __mongometa__: -# name = 'ticket_comment' - -# type_s = 'Ticket Comment' -# version = FieldProperty(0) -# created_date = FieldProperty(datetime, if_missing=datetime.utcnow) - -# ticket_id = ForeignIdProperty(Ticket) -# kind = FieldProperty(str, if_missing='comment') -# reply_to_id = FieldProperty(schema.ObjectId, if_missing=None) -# text = FieldProperty(str) - -# ticket = RelationProperty('Ticket') - -# def index(self): -# result = Message.index(self) -# author = self.author() -# result.update( -# title_s='Comment on %s by %s' % ( -# self.ticket.shorthand_id(), -# author.display_name -# ), -# type_s=self.type_s -# ) -# return result - -# @property -# def posted_ago(self): -# comment_td = (datetime.utcnow() - self.timestamp) -# if comment_td.seconds < 3600 and comment_td.days < 1: -# return "%s minutes ago" % (comment_td.seconds / 60) -# elif comment_td.seconds >= 3600 and comment_td.days < 1: -# return "%s hours ago" % (comment_td.seconds / 3600) -# elif comment_td.days >= 1 and comment_td.days < 7: -# return "%s days ago" % comment_td.days -# elif comment_td.days >= 7 and comment_td.days < 30: -# return "%s weeks ago" % (comment_td.days / 7) -# elif comment_td.days >= 30 and comment_td.days < 365: -# return "%s months ago" % (comment_td.days / 30) -# else: -# return "%s years ago" % (comment_td.days / 365) - -# def url(self): -# return self.ticket.url() + '#comment-' + str(self._id) - -# def shorthand_id(self): -# return '%s-%s' % (self.ticket.shorthand_id, self._id) - -# def reply(self, text): -# r = Message.reply(self) -# r.text = text -# Feed.post(self.ticket, 'Comment: %s', text) -# return r - class Attachment(File): class __mongometa__: name = 'attachment.files'