37 from persistent import Persistent |
37 from persistent import Persistent |
38 from pyams_mail.message import HTMLMessage |
38 from pyams_mail.message import HTMLMessage |
39 from pyams_security.principal import MissingPrincipal |
39 from pyams_security.principal import MissingPrincipal |
40 from pyams_utils.adapter import adapter_config, ContextAdapter |
40 from pyams_utils.adapter import adapter_config, ContextAdapter |
41 from pyams_utils.container import BTreeOrderedContainer |
41 from pyams_utils.container import BTreeOrderedContainer |
42 from pyams_utils.registry import query_utility |
42 from pyams_utils.registry import query_utility, get_utility |
43 from pyams_utils.request import check_request, query_request |
43 from pyams_utils.request import check_request, query_request |
44 from pyams_utils.url import absolute_url |
44 from pyams_utils.url import absolute_url |
45 from pyramid.events import subscriber |
45 from pyramid.events import subscriber |
46 from pyramid.threadlocal import get_current_registry |
46 from pyramid.threadlocal import get_current_registry |
47 from pyramid_chameleon.zpt import PageTemplateFile |
47 from pyramid_chameleon.zpt import PageTemplateFile |
56 @implementer(IReviewComment) |
56 @implementer(IReviewComment) |
57 class ReviewComment(Persistent, Contained): |
57 class ReviewComment(Persistent, Contained): |
58 """Review comment persistent class""" |
58 """Review comment persistent class""" |
59 |
59 |
60 owner = FieldProperty(IReviewComment['owner']) |
60 owner = FieldProperty(IReviewComment['owner']) |
|
61 reviewers = FieldProperty(IReviewComment['reviewers']) |
|
62 comment_type = FieldProperty(IReviewComment['comment_type']) |
61 comment = FieldProperty(IReviewComment['comment']) |
63 comment = FieldProperty(IReviewComment['comment']) |
62 comment_type = FieldProperty(IReviewComment['comment_type']) |
64 is_reviewer_comment = FieldProperty(IReviewComment['is_reviewer_comment']) |
63 creation_date = FieldProperty(IReviewComment['creation_date']) |
65 creation_date = FieldProperty(IReviewComment['creation_date']) |
64 |
66 |
65 def __init__(self, owner, comment, comment_type='comment'): |
67 def __init__(self, owner, comment, comment_type='comment', reviewers=None): |
66 self.owner = owner |
68 self.owner = owner |
67 self.comment = comment |
69 self.comment = comment |
68 self.comment_type = comment_type |
70 self.comment_type = comment_type |
|
71 security = get_utility(ISecurityManager) |
|
72 if reviewers: |
|
73 self.reviewers = ', '.join((principal.title for principal in ( |
|
74 security.get_principal(reviewer) for reviewer in reviewers))) |
69 self.creation_date = datetime.utcnow() |
75 self.creation_date = datetime.utcnow() |
70 |
76 |
71 |
77 |
72 @implementer(IReviewComments) |
78 @implementer(IReviewComments) |
73 class ReviewCommentsContainer(BTreeOrderedContainer): |
79 class ReviewCommentsContainer(BTreeOrderedContainer): |
129 return |
135 return |
130 # check request |
136 # check request |
131 request = check_request() |
137 request = check_request() |
132 translate = request.localizer.translate |
138 translate = request.localizer.translate |
133 # initialize mailer |
139 # initialize mailer |
134 security = query_utility(ISecurityManager) |
140 security = get_utility(ISecurityManager) |
135 settings = INotificationSettings(security) |
141 settings = INotificationSettings(security) |
136 sender_name = request.principal.title if request.principal is not None else settings.sender_name |
142 sender_name = request.principal.title if request.principal is not None else settings.sender_name |
137 sender_address = settings.sender_email |
143 sender_address = settings.sender_email |
138 sender = security.get_principal(request.principal.id, info=False) |
144 sender = security.get_principal(request.principal.id, info=False) |
139 sender_mail_info = IPrincipalMailInfo(sender, None) |
145 sender_mail_info = IPrincipalMailInfo(sender, None) |
174 notifications += 1 |
180 notifications += 1 |
175 readers.add(reviewer) |
181 readers.add(reviewer) |
176 roles.readers = readers |
182 roles.readers = readers |
177 # add comment |
183 # add comment |
178 review_comment = ReviewComment(owner=request.principal.id, |
184 review_comment = ReviewComment(owner=request.principal.id, |
179 comment=comment, |
185 comment_type='request', |
180 comment_type='request') |
186 comment=translate(_("Request comment: {comment}")).format(comment=comment), |
|
187 reviewers=reviewers) |
181 IReviewComments(self.context).add_comment(review_comment) |
188 IReviewComments(self.context).add_comment(review_comment) |
182 # return notifications count |
189 # return notifications count |
183 return notifications |
190 return notifications |
184 |
191 |
185 |
192 |
191 from pyams_notify.interfaces import INotification, INotificationHandler |
198 from pyams_notify.interfaces import INotification, INotificationHandler |
192 from pyams_notify.event import Notification |
199 from pyams_notify.event import Notification |
193 except ImportError: |
200 except ImportError: |
194 pass |
201 pass |
195 else: |
202 else: |
196 |
|
197 @subscriber(ICommentAddedEvent) |
203 @subscriber(ICommentAddedEvent) |
198 def handle_new_comment(event): |
204 def handle_new_comment(event): |
199 """Handle new review comment""" |
205 """Handle new review comment""" |
200 request = query_request() |
206 request = query_request() |
201 if request is None: |
207 if request is None: |