in ForgeTracker/forgetracker/model/ticket.py [0:0]
def commit(self, subscribe=False, **kwargs):
VersionedArtifact.commit(self)
monitoring_email = self.app.config.options.get('TicketMonitoringEmail')
if self.version > 1:
hist = TicketHistory.query.get(
artifact_id=self._id, version=self.version - 1)
old = hist.data
changes = ['Ticket {} has been modified: {}'.format(
self.ticket_num, self.summary),
'Edited By: {} ({})'.format(c.user.get_pref('display_name'), c.user.username)]
fields = [
('Summary', old.summary, self.summary),
('Status', old.status, self.status)]
if old.status != self.status and self.status in c.app.globals.set_of_closed_status_names:
g.statsUpdater.ticketEvent(
"closed", self, self.project, self.assigned_to)
for key in self.custom_fields:
fields.append(
(key, old.custom_fields.get(key, ''), self.custom_fields[key]))
for title, o, n in fields:
if o != n:
changes.append('{} updated: {!r} => {!r}'.format(
title, o, n))
o = hist.assigned_to
n = self.assigned_to
if o != n:
changes.append('Owner updated: {!r} => {!r}'.format(
o and o.username, n and n.username))
self.subscribe(user=n)
g.statsUpdater.ticketEvent("assigned", self, self.project, n)
if o:
g.statsUpdater.ticketEvent(
"revoked", self, self.project, o)
if old.description != self.description:
changes.append('Description updated:')
changes.append('\n'.join(
difflib.unified_diff(
a=old.description.split('\n'),
b=self.description.split('\n'),
fromfile='description-old',
tofile='description-new')))
description = '\n'.join(changes)
else:
if subscribe:
self.subscribe()
if self.assigned_to_id:
user = User.query.get(_id=self.assigned_to_id)
g.statsUpdater.ticketEvent(
"assigned", self, self.project, user)
self.subscribe(user=user)
description = ''
subject = self.email_subject
Thread.new(discussion_id=self.app_config.discussion_id,
ref_id=self.index_id())
# First ticket notification. Use persistend Message-ID (self.message_id()).
# Thus we can group notification emails in one thread later.
n = Notification.post(
message_id=self.message_id(),
artifact=self,
topic='metadata',
text=description,
subject=subject)
if monitoring_email and n and (not self.private or
self.app.config.options.get('TicketMonitoringType') in (
'NewTicketsOnly', 'AllTicketChanges')):
n.send_simple(monitoring_email)
Feed.post(
self,
title=self.summary,
description=description if description else self.description,
author=self.reported_by,
pubdate=self.created_date)