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'] = '' + escape(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