diff --git a/invenio/modules/formatter/format_elements/bfe_authors.py b/invenio/modules/formatter/format_elements/bfe_authors.py index a73fed12f..30f50ad0d 100644 --- a/invenio/modules/formatter/format_elements/bfe_authors.py +++ b/invenio/modules/formatter/format_elements/bfe_authors.py @@ -1,202 +1,207 @@ # -*- coding: utf-8 -*- ## ## This file is part of Invenio. ## Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2013 CERN. ## ## Invenio is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation; either version 2 of the ## License, or (at your option) any later version. ## ## Invenio is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Invenio; if not, write to the Free Software Foundation, Inc., ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. """BibFormat element - Prints authors """ __revision__ = "$Id$" import re +import six from urllib import quote from cgi import escape -from invenio.config import CFG_SITE_URL +from invenio.base.globals import cfg from invenio.base.i18n import gettext_set_language from invenio.legacy.bibauthority.config import \ CFG_BIBAUTHORITY_AUTHORITY_COLLECTION_NAME, \ CFG_BIBAUTHORITY_TYPE_NAMES, \ CFG_BIBAUTHORITY_PREFIX_SEP from invenio.legacy.bibauthority.engine import \ get_low_level_recIDs_from_control_no def format_element(bfo, limit, separator=' ; ', extension='[...]', print_links="yes", print_affiliations='no', affiliation_prefix=' (', affiliation_suffix=')', interactive="no", highlight="no", link_author_pages="no", link_mobile_pages="no", relator_code_pattern=None): """ Prints the list of authors of a record. @param limit: the maximum number of authors to display @param separator: the separator between authors. @param extension: a text printed if more authors than 'limit' exist @param print_links: if yes, prints the authors as HTML link to their publications @param print_affiliations: if yes, make each author name followed by its affiliation @param affiliation_prefix: prefix printed before each affiliation @param affiliation_suffix: suffix printed after each affiliation @param interactive: if yes, enable user to show/hide authors when there are too many (html + javascript) @param highlight: highlights authors corresponding to search query if set to 'yes' @param link_author_pages: should we link to author pages if print_links in on? @param link_mobile_pages: should we link to mobile app pages if print_links in on? @param relator_code_pattern: a regular expression to filter authors based on subfield $4 (relator code) """ + CFG_SITE_URL = cfg['CFG_SITE_URL'] + if isinstance(CFG_SITE_URL, six.text_type): + CFG_SITE_URL = CFG_SITE_URL.encode('utf8') + _ = gettext_set_language(bfo.lang) # load the right message language authors = [] authors_1 = bfo.fields('100__', repeatable_subfields_p=True) authors_2 = bfo.fields('700__', repeatable_subfields_p=True) authors.extend(authors_1) authors.extend(authors_2) # make unique string per key for author in authors: if 'a' in author: author['a'] = author['a'][0] if 'u' in author: author['u'] = author['u'][0] pattern = '%s' + CFG_BIBAUTHORITY_PREFIX_SEP + "(" for control_no in author.get('0', []): if pattern % (CFG_BIBAUTHORITY_TYPE_NAMES["INSTITUTION"]) in control_no: author['u0'] = control_no # overwrite if multiples elif pattern % (CFG_BIBAUTHORITY_TYPE_NAMES["AUTHOR"]) in control_no: author['a0'] = control_no # overwrite if multiples if relator_code_pattern: p = re.compile(relator_code_pattern) authors = filter(lambda x: p.match(x.get('4', '')), authors) nb_authors = len(authors) bibrec_id = bfo.control_field("001") # Process authors to add link, highlight and format affiliation for author in authors: if author.has_key('a'): if highlight == 'yes': from invenio.modules.formatter import utils as bibformat_utils author['a'] = bibformat_utils.highlight(author['a'], bfo.search_pattern) if print_links.lower() == "yes": if link_author_pages == "yes": author['a'] = '' elif link_mobile_pages == 'yes': author['a'] = '' + escape(author['a']) + '' else: auth_coll_param = '' if 'a0' in author: recIDs = get_low_level_recIDs_from_control_no(author['a0']) if len(recIDs): auth_coll_param = '&c=' + \ CFG_BIBAUTHORITY_AUTHORITY_COLLECTION_NAME author['a'] = '' + escape(author['a']) + '' if author.has_key('u'): if print_affiliations == "yes": if 'u0' in author: recIDs = get_low_level_recIDs_from_control_no(author['u0']) # if there is more than 1 recID, clicking on link and # thus displaying the authority record's page should # contain a warning that there are multiple authority # records with the same control number if len(recIDs): author['u'] = '' + author['u'] + '' author['u'] = affiliation_prefix + author['u'] + \ affiliation_suffix # Flatten author instances if print_affiliations == 'yes': authors = [author.get('a', '') + author.get('u', '') for author in authors] else: authors = [author.get('a', '') for author in authors] if limit.isdigit() and nb_authors > int(limit) and interactive != "yes": return separator.join(authors[:int(limit)]) + extension elif limit.isdigit() and nb_authors > int(limit) and interactive == "yes": out = '' out += separator.join(authors[:int(limit)]) out += '' % bibrec_id + separator + \ separator.join(authors[int(limit):]) + '' out += ' ' % bibrec_id out += ' ' % bibrec_id out += ''' ''' % {'show_less':_("Hide"), 'show_more':_("Show all %(x_num)i authors", x_num=nb_authors), 'extension':extension, 'recid': bibrec_id} out += '' % bibrec_id return out elif nb_authors > 0: return separator.join(authors) def escape_values(bfo): """ Called by BibFormat in order to check if output of this element should be escaped. """ return 0 diff --git a/invenio/modules/formatter/format_elements/bfe_keywords.py b/invenio/modules/formatter/format_elements/bfe_keywords.py index d2b4674e0..afc850622 100644 --- a/invenio/modules/formatter/format_elements/bfe_keywords.py +++ b/invenio/modules/formatter/format_elements/bfe_keywords.py @@ -1,59 +1,64 @@ # -*- coding: utf-8 -*- ## ## This file is part of Invenio. ## Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 CERN. ## ## Invenio is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation; either version 2 of the ## License, or (at your option) any later version. ## ## Invenio is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Invenio; if not, write to the Free Software Foundation, Inc., ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. """BibFormat element - Prints keywords """ __revision__ = "$Id$" import cgi +import six from urllib import quote -from invenio.config import CFG_SITE_URL +from invenio.base.globals import cfg + def format_element(bfo, keyword_prefix, keyword_suffix, separator=' ; ', link='yes'): """ Display keywords of the record. @param keyword_prefix: a prefix before each keyword @param keyword_suffix: a suffix after each keyword @param separator: a separator between keywords @param link: links the keywords if 'yes' (HTML links) """ + CFG_SITE_URL = cfg['CFG_SITE_URL'] + if isinstance(CFG_SITE_URL, six.text_type): + CFG_SITE_URL = CFG_SITE_URL.encode('utf8') keywords = bfo.fields('6531_a') if len(keywords) > 0: if link == 'yes': keywords = ['' + cgi.escape(keyword) + '' for keyword in keywords] else: keywords = [cgi.escape(keyword) for keyword in keywords] keywords = [keyword_prefix + keyword + keyword_suffix for keyword in keywords] return separator.join(keywords) def escape_values(bfo): """ Called by BibFormat in order to check if output of this element should be escaped. """ return 0