src/pyams_content/features/review/__init__.py
changeset 313 2e71fb238b1c
parent 238 2dc445ad2cf5
child 501 3407e6940f6a
equal deleted inserted replaced
312:cc13bd3548c3 313:2e71fb238b1c
    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: