def __call__(self): root = getToolByName(self.context, 'portal_url' ).getPortalObject() mail_info = IMailSchema(root) mail_from = '%s <%s>' % (mail_info.email_from_name, mail_info.email_from_address) comment = self.context conversation = aq_parent(comment) review = aq_parent(conversation) pg = IParentGetter(review) args = {} args['url'] = review.absolute_url() args['date'] = review.created().strftime('%d.%m.%Y') args['title'] = review.title + (hasattr(review, 'subtitle') and review.subtitle and ': ' + review.subtitle or '') args['year'] = getattr(review, 'yearOfPublication', '') args['isbn'] = getattr(review, 'isbn', '') args['reviewers'] = '/'.join(review.listReviewAuthors()) args['journal'] = pg.get_title_from_parent_of_type('Publication' ) args['volume'] = pg.get_title_from_parent_of_type('Volume') args['issue'] = pg.get_title_from_parent_of_type('Issue') args['commenter'] = comment.author_name args['commentdate'] = comment.creation_date.strftime('%d.%m.%Y') args['mail_from'] = mail_from for key in args: args[key] = safe_unicode(args[key]) # for review types, notify authors of the works (via editorial # office) if review.portal_type in REVIEW_TYPES: authors = getattr(review, 'authors', []) args['recipient'] = get_formatted_names(u' / ', ' ', authors) args['author'] = args['recipient'] mail_to = mail_from pref_lang = 'de' for author in authors: # for pref_lang in # self.pl.getAvailableLanguages().keys(): # send one # mail for for every language subject = \ self.ts.translate(_('mail_new_comment_subject_review_author' , mapping=args), target_language=pref_lang) msg_template = \ self.ts.translate(_('mail_new_comment_body_review_author' , mapping=args), target_language=pref_lang) self.sendMail(msg_template, mail_from, mail_to, subject) else: # for presentation types, notify presentation author args['recipient'] = get_formatted_names(u' / ', ' ', self.context.getReviewAuthors()) args['author'] = 'someone' if hasattr(self.context, 'getAuthors'): args['author'] = get_formatted_names(u' / ', ' ', self.context.getAuthors()) elif hasattr(self.context, 'getInstitution'): institutions = self.context.getInstitution() if institutions: args['author'] = institutions[0]['name'] (mail_to, pref_lang) = self.findRecipient() if not mail_to: mail_to = getattr(review, 'reviewAuthorEmail', '') subject = \ self.ts.translate(_('mail_new_comment_subject_presentation_author' , mapping=args), target_language=pref_lang) msg_template = \ self.ts.translate(_('mail_new_comment_body_presentation_author' , mapping=args), target_language=pref_lang) self.sendMail(msg_template, mail_from, mail_to, subject) # Find other comment authors and notify them recipients = [] for item in conversation.items(): cmt = item[1] if not cmt.author_email in map(lambda x: x[0], recipients) \ and (not mail_to or not cmt.author_email in mail_to) \ and not cmt.author_email == comment.author_email: rcpt = self.findRecipient(id=cmt.author_username) recipients.append(rcpt + (cmt.author_name, )) for rcpt in recipients: (mail_to, pref_lang, name) = rcpt if ' ' in name: name = name.split(' ') name = {'firstname': name[0], 'lastname': name[1]} else: name = {'firstname': '', 'lastname': name} args['recipient'] = get_formatted_names(u' ', u' ', [name]) if review.portal_type in REVIEW_TYPES: subject = \ self.ts.translate(_('mail_new_comment_subject_review_commenter' , mapping=args), target_language=pref_lang) msg_template = \ self.ts.translate(_('mail_new_comment_body_review_commenter' , mapping=args), target_language=pref_lang) else: subject = \ self.ts.translate(_('mail_new_comment_subject_presentation_commenter' , mapping=args), target_language=pref_lang) msg_template = \ self.ts.translate(_('mail_new_comment_body_presentation_commenter' , mapping=args), target_language=pref_lang) self.sendMail(msg_template, mail_from, mail_to, subject)