def getDecoratedTitle(real_self, lastname_first=False): """ >>> from mock import Mock >>> at_mock = Mock() >>> at_mock.title = "Plone Mag" >>> at_mock.reviewAuthors = [{'firstname' : 'Cillian', 'lastname' : 'de Roiste'}] >>> at_mock.yearOfPublication = '2009' >>> at_mock.officialYearOfPublication = '2010' >>> at_mock.volumeNumber = '1' >>> at_mock.issueNumber = '3' >>> review = ReviewJournalNoMagic(at_mock) >>> review.directTranslate = lambda a: a >>> review.getDecoratedTitle() u'Plone Mag, 1 (2010/2009), 3 (reviewed_by)' """ self = real_self.magic item = getFormatter(', ', ' ', ', ') mag_year = getFormatter('/')(self.officialYearOfPublication, self.yearOfPublication) mag_year = mag_year and '(' + mag_year + ')' or None item_string = item( self.title, self.volumeNumber, mag_year, self.issueNumber) if lastname_first: reviewer_string = get_formatted_names( u' / ', ', ', self.reviewAuthors, lastname_first = lastname_first) else: reviewer_string = get_formatted_names( u' / ', ' ', self.reviewAuthors, lastname_first = lastname_first) if reviewer_string: reviewer_string = "(%s)" % real_self.directTranslate( Message(u"reviewed_by", "recensio", mapping={u"review_authors": reviewer_string})) return ' '.join(( item_string, reviewer_string))
def __call__(self, skip_addrs=[]): 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) referenceAuthors = getattr(self.context, 'referenceAuthors', []) def get_preferred_language(email, default='en'): found = self.pas.searchUsers(email=args['mail_to']) if found: owner = \ self.membership_tool.getMemberById(found[0]['userid' ]).getUser() return owner.getProperty('preferred_language', default) else: return default for author in referenceAuthors: if author.has_key('email') and author['email'] \ in skip_addrs: continue args = {} fuckup = [author['firstname'], author['lastname']] fuckup = [safe_unicode(x) for x in fuckup] args['reviewed_author'] = u' '.join(fuckup) args['mail_from'] = safe_unicode(mail_from) pref_lang = 'en' args['title'] = safe_unicode(self.context.title) \ + (safe_unicode(self.context.subtitle) and u': ' + safe_unicode(self.context.subtitle) or u'') args['review_author'] = get_formatted_names(u' / ', ' ', self.context.reviewAuthors) args['concept_url'] = root.absolute_url() \ + '/ueberuns/konzept' args['context_url'] = self.context.absolute_url() pref_lang = author['preferred_language'] if author.has_key('email') and author['email']: args['mail_to'] = author['email'] msg_template = \ self.ts.translate(_('mail_new_publication_body', mapping=args), target_language=pref_lang) else: args['mail_to'] = args['mail_from'] msg_template = \ self.ts.translate(_('mail_new_publication_intro', mapping=args), target_language=pref_lang) \ + self.ts.translate(_('mail_new_publication_body', mapping=args), target_language=pref_lang) subject = self.ts.translate(_('mail_new_publication_subject' , default=u'Es wurde eine Rezension von ${title} ver\xf6ffentlicht' , mapping=args), target_language=pref_lang) self.sendMail(msg_template, args['mail_to'], mail_from, subject)
def getDecoratedTitle(self, obj, lastname_first=False): authors_string = obj.formatted_authors_editorial() rezensent_string = get_formatted_names( u' / ', ' ', obj.reviewAuthors, lastname_first=lastname_first) if rezensent_string: rezensent_string = "%s" % translate_message( Message( u"reviewed_by", "recensio", mapping={u"review_authors": rezensent_string}, ) ) titles = "<span class='title'>%s</span>" % obj.punctuated_title_and_subtitle pub_year = "(%s)" % obj.yearOfPublication full_citation = getFormatter(', ', ' ', ', ') return full_citation(authors_string, titles, pub_year, rezensent_string)
def getDecoratedTitle(real_self, lastname_first=False): """ >>> from mock import Mock >>> at_mock = Mock() >>> at_mock.customCitation = '' >>> at_mock.formatted_authors_editorial = "Patrick Gerken / Alexander Pilz" >>> at_mock.punctuated_title_and_subtitle = "Plone 4.0. Das Benutzerhandbuch" >>> at_mock.reviewAuthors = [{'firstname' : 'Cillian', 'lastname' : 'de Roiste'}] >>> review = ReviewMonographNoMagic(at_mock) >>> review.directTranslate = lambda a: a >>> review.getDecoratedTitle() u'Patrick Gerken / Alexander Pilz: Plone 4.0. Das Benutzerhandbuch (reviewed_by)' Original Spec: [Werkautor Vorname] [Werkautor Nachname]: [Werktitel]. [Werk-Untertitel] (reviewed by [Rezensent Vorname] [Rezensent Nachname]) Analog, Werkautoren kann es mehrere geben (Siehe Citation) Hans Meier: Geschichte des Abendlandes. Ein Abriss (reviewed by Klaus Müller) """ self = real_self.magic name_part_separator = " " if lastname_first: name_part_separator = ", " authors_string = self.formatted_authors_editorial rezensent_string = get_formatted_names(u" / ", " ", self.reviewAuthors, lastname_first=lastname_first) if rezensent_string: rezensent_string = "(%s)" % real_self.directTranslate( Message(u"reviewed_by", "recensio", mapping={u"review_authors": rezensent_string}) ) full_citation = getFormatter(": ", " ") return full_citation(authors_string, self.punctuated_title_and_subtitle, rezensent_string)
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)
def get_citation_string(real_self): """ >>> from mock import Mock >>> at_mock = Mock() >>> at_mock.get = lambda x: None >>> at_mock.customCitation = '' >>> at_mock.title = "Plone Mag♥" >>> at_mock.reviewAuthors = [{'firstname' : 'Cillian♥', 'lastname' : 'de Roiste♥'}] >>> at_mock.yearOfPublication = '2009♥' >>> at_mock.officialYearOfPublication = '2010♥' >>> at_mock.publisher = 'SYSLAB.COM GmbH♥' >>> at_mock.placeOfPublication = 'München♥' >>> at_mock.volumeNumber = '1♥' >>> at_mock.issueNumber = '3♥' >>> at_mock.get_issue_title = lambda :'Open Source Mag 1♥' >>> at_mock.get_volume_title = lambda :'Open Source Mag Vol 1♥' >>> at_mock.get_publication_title = lambda :'Open Source♥' >>> at_mock.portal_url = lambda :'http://www.syslab.com' >>> at_mock.UID = lambda :'12345' >>> at_mock.canonical_uri = '' >>> at_mock.page_start_end_in_print = '11-21' >>> review = ReviewJournalNoMagic(at_mock) >>> review.directTranslate = lambda m: m.default >>> review.get_citation_string() u'de Roiste\u2665, Cillian\u2665: review of: Plone Mag\u2665, 1\u2665, 3\u2665 (2010\u2665/2009\u2665), in: Open Source\u2665, Open Source Mag Vol 1\u2665, Open Source Mag 1\u2665, p. 11-21, <a href="http://syslab.com/r/12345">http://syslab.com/r/12345</a>' Return the citation according to this schema: [Rezensent Nachname], [Rezensent Vorname]: review of: [Zs-Titel der rez. Zs.], [Nummer], [Heftnummer (gezähltes Jahr/Erscheinungsjahr)], in: [Zs-Titel], [Nummer], [Heftnummer (gezähltes Jahr/Erscheinungsjahr)], p.[pageStart]-[pageEnd] URL recensio. The years of the magazine article reviewing the other magazine does not exist. """ self = real_self.magic if self.customCitation: return scrubHTML(self.customCitation).decode('utf8') rev_details_formatter = getFormatter(u', ', u', ', u' ') mag_year = getFormatter('/')(self.officialYearOfPublication, self.yearOfPublication) mag_year = mag_year and '(' + mag_year + ')' or None item_string = rev_details_formatter(self.title, self.volumeNumber, self.issueNumber, mag_year) reference_mag = getFormatter(', ', ', ') reference_mag_string = reference_mag(self.get_publication_title(), self.get_volume_title(), self.get_issue_title()) location = real_self.getUUIDUrl() if getattr(self, "canonical_uri", False): #3102 location = real_self.directTranslate( Message(u"label_downloaded_via_recensio", "recensio")) rezensent_string = get_formatted_names( u' / ', ', ', self.reviewAuthors, lastname_first = True) args = { 'review_of' : real_self.directTranslate(Message( u"text_review_of", "recensio", default="review of:")), 'in' : real_self.directTranslate(Message( u"text_in", "recensio", default="in:")), 'page' : real_self.directTranslate(Message( u"text_pages", "recensio", default="p.")), ':' : real_self.directTranslate(Message( u"text_colon", "recensio", default=":")), } citation_formatter = getFormatter( u'%(:)s %(review_of)s ' % args, ', %(in)s ' % args, ', %(page)s ' % args, u', ') citation_string = citation_formatter( escape(rezensent_string), escape(item_string), escape(reference_mag_string), self.page_start_end_in_print, location) return citation_string
def get_metadata_review_author(self): return get_formatted_names(u' <br/> ', ', ', self.context.reviewAuthors, lastname_first=True)
def get_citation_string(real_self): """ Either return the custom citation or the generated one >>> from mock import Mock >>> at_mock = Mock() >>> at_mock.customCitation = '' >>> at_mock.get = lambda x: None >>> at_mock.formatted_authors_editorial = u"Gerken\u2665, Patrick\u2665 / Pilz, Alexander" >>> at_mock.title = "Plone 4.0♥?" >>> at_mock.subtitle = "Das Benutzerhandbuch♥" >>> at_mock.reviewAuthors = [{'firstname' : 'Cillian♥', 'lastname' : 'de Roiste♥'}] >>> at_mock.yearOfPublication = '2009♥' >>> at_mock.publisher = 'SYSLAB.COM GmbH♥' >>> at_mock.placeOfPublication = 'München♥' >>> at_mock.get_issue_title = lambda :'Open Source Mag 1♥' >>> at_mock.get_volume_title = lambda :'Open Source Mag Vol 1♥' >>> at_mock.get_publication_title = lambda :'Open Source♥' >>> at_mock.portal_url = lambda :'http://www.syslab.com' >>> at_mock.UID = lambda :'12345' >>> at_mock.canonical_uri = '' >>> at_mock.page_start_end_in_print = '11-21' >>> review = ReviewMonographNoMagic(at_mock) >>> review.directTranslate = lambda m: m.default >>> review.get_citation_string() u'de Roiste\u2665, Cillian\u2665: review of: Gerken\u2665, Patrick\u2665 / Pilz, Alexander, Plone 4.0\u2665? Das Benutzerhandbuch\u2665, M\\xfcnchen\u2665: SYSLAB.COM GmbH\u2665, 2009\u2665, in: Open Source\u2665, Open Source Mag Vol 1\u2665, Open Source Mag 1\u2665, p. 11-21, <a href="http://syslab.com/r/12345">http://syslab.com/r/12345</a>' Original Spec: [Rezensent Nachname], [Rezensent Vorname]: review of: [Werkautor Nachname], [Werkautor Vorname], [Werktitel]. [Werk-Untertitel], [Erscheinungsort]: [Verlag], [Jahr], in: [Zs-Titel], [Nummer], [Heftnummer (Erscheinungsjahr)], p.[pageStart]-[pageEnd] URL recensio. Werkautoren kann es mehrere geben, die werden dann durch ' / ' getrennt alle aufgelistet. Note: gezähltes Jahr entfernt. Da es die Felder Zs-Titel, Nummer und Heftnummer werden die Titel der Objekte magazine, volume, issue genommen, in dem der Review liegt Müller, Klaus: review of: Meier, Hans, Geschichte des Abendlandes. Ein Abriss, München: Oldenbourg, 2010, in: Zeitschrift für Geschichte, 39, 3 (2008/2009), www.recensio.net/## """ self = real_self.magic if self.customCitation: return scrubHTML(self.customCitation).decode("utf8") args = { "review_of": real_self.directTranslate(Message(u"text_review_of", "recensio", default="review of:")), "in": real_self.directTranslate(Message(u"text_in", "recensio", default="in:")), "page": real_self.directTranslate(Message(u"text_pages", "recensio", default="p.")), ":": real_self.directTranslate(Message(u"text_colon", "recensio", default=":")), } if self.title[-1] in "!?:;.,": title_subtitle = getFormatter(u" ") else: title_subtitle = getFormatter(u". ") rev_details_formatter = getFormatter(u", ", u", ", u"%(:)s " % args, u", ") rezensent_string = get_formatted_names(u" / ", ", ", self.reviewAuthors, lastname_first=True) authors_string = self.formatted_authors_editorial title_subtitle_string = title_subtitle(self.title, self.subtitle) item_string = rev_details_formatter( authors_string, title_subtitle_string, self.placeOfPublication, self.publisher, self.yearOfPublication ) mag_year_string = self.yearOfPublication.decode("utf-8") mag_year_string = mag_year_string and u"(" + mag_year_string + u")" or None mag_number_formatter = getFormatter(u", ", u", ") mag_number_string = mag_number_formatter( self.get_publication_title(), self.get_volume_title(), self.get_issue_title() ) location = real_self.getUUIDUrl() if getattr(self, "canonical_uri", False): # 3102 location = real_self.directTranslate(Message(u"label_downloaded_via_recensio", "recensio")) citation_formatter = getFormatter( u"%(:)s %(review_of)s " % args, ", %(in)s " % args, ", %(page)s " % args, u", " ) citation_string = citation_formatter( escape(rezensent_string), escape(item_string), escape(mag_number_string), self.page_start_end_in_print, location, ) return citation_string