def guess_collection_of_a_record(recID, referer=None, recreate_cache_if_needed=True): """Return collection name a record recid belongs to, by first testing the referer URL if provided and otherwise returning the primary collection.""" if referer: dummy, hostname, path, dummy, query, dummy = urlparse.urlparse(referer) # requests can come from different invenio installations, with # different collections if CFG_SITE_URL.find(hostname) < 0: return guess_primary_collection_of_a_record(recID) g = _re_collection_url.match(path) if g: name = urllib.unquote_plus(g.group(1)) # check if this collection actually exist (also normalize the name # if case-insensitive) name = Collection.query.filter_by(name=name).value('name') if name and recID in get_collection_reclist(name): return name elif path.startswith('/search'): if recreate_cache_if_needed: collection_reclist_cache.recreate_cache_if_needed() query = cgi.parse_qs(query) for name in query.get('cc', []) + query.get('c', []): name = Collection.query.filter_by(name=name).value('name') if name and recID in get_collection_reclist(name, recreate_cache_if_needed=False): return name return guess_primary_collection_of_a_record(recID)
def guess_collection_of_a_record(recID, referer=None, recreate_cache_if_needed=True): """Return collection name a record recid belongs to, by first testing the referer URL if provided and otherwise returning the primary collection.""" if referer: dummy, hostname, path, dummy, query, dummy = urlparse.urlparse(referer) # requests can come from different invenio installations, with # different collections if CFG_SITE_URL.find(hostname) < 0: return guess_primary_collection_of_a_record(recID) g = _re_collection_url.match(path) if g: name = urllib.unquote_plus(g.group(1)) # check if this collection actually exist (also normalize the name # if case-insensitive) name = Collection.query.filter_by(name=name).value('name') if name and recID in get_collection_reclist(name): return name elif path.startswith('/search'): if recreate_cache_if_needed: collection_reclist_cache.recreate_cache_if_needed() query = cgi.parse_qs(query) for name in query.get('cc', []) + query.get('c', []): name = Collection.query.filter_by(name=name).value('name') if name and recID in get_collection_reclist( name, recreate_cache_if_needed=False): return name return guess_primary_collection_of_a_record(recID)
def check_wsgiref_testing_feasability(): """ In order to use wsgiref for running Invenio, CFG_SITE_URL and CFG_SITE_SECURE_URL must not use HTTPS because SSL is not supported. """ if CFG_SITE_URL.lower().startswith('https'): print >> sys.stderr, """ ERROR: SSL is not supported by the wsgiref simple server implementation. Please set CFG_SITE_URL not to start with "https". Currently CFG_SITE_URL is set to: "%s".""" % CFG_SITE_URL sys.exit(1) if CFG_SITE_SECURE_URL.lower().startswith('https'): print >> sys.stderr, """ ERROR: SSL is not supported by the wsgiref simple server implementation. Please set CFG_SITE_SECURE_URL not to start with "https". Currently CFG_SITE_SECURE_URL is set to: "%s".""" % CFG_SITE_SECURE_URL sys.exit(1)
def tmpl_pageheader(self, req, ln=CFG_SITE_LANG, headertitle="", description="", keywords="", userinfobox="", useractivities_menu="", adminactivities_menu="", navtrailbox="", pageheaderadd="", uid=0, secure_page_p=0, navmenuid="admin", metaheaderadd="", rssurl=CFG_BASE_URL+"/rss", body_css_classes=None): """Creates a page header Parameters: - 'ln' *string* - The language to display - 'headertitle' *string* - the title of the HTML page, not yet escaped for HTML - 'description' *string* - description goes to the metadata in the header of the HTML page, not yet escaped for HTML - 'keywords' *string* - keywords goes to the metadata in the header of the HTML page, not yet escaped for HTML - 'userinfobox' *string* - the HTML code for the user information box - 'useractivities_menu' *string* - the HTML code for the user activities menu - 'adminactivities_menu' *string* - the HTML code for the admin activities menu - 'navtrailbox' *string* - the HTML code for the navigation trail box - 'pageheaderadd' *string* - additional page header HTML code - 'uid' *int* - user ID - 'secure_page_p' *int* (0 or 1) - are we to use HTTPS friendly page elements or not? - 'navmenuid' *string* - the id of the navigation item to highlight for this page - 'metaheaderadd' *string* - list of further tags to add to the <HEAD></HEAD> part of the page - 'rssurl' *string* - the url of the RSS feed for this page - 'body_css_classes' *list* - list of classes to add to the body tag Output: - HTML code of the page headers """ # Including HEPData headers ( Ugly hack but no obvious way to avoid this ...) if CFG_INSPIRE_SITE: hepDataAdditions = """<script type="text/javascript" src="%s/js/hepdata.js"></script>""" \ % (CFG_BASE_URL, ) hepDataAdditions += """<link rel="stylesheet" href="%s/img/hepdata.css" type="text/css" />""" \ % (CFG_BASE_URL, ) else: hepDataAdditions = "" # load the right message language _ = gettext_set_language(ln) if body_css_classes is None: body_css_classes = [] body_css_classes.append(navmenuid) uri = req.unparsed_uri headerLinkbackTrackbackLink = '' if CFG_WEBLINKBACK_TRACKBACK_ENABLED: from invenio.weblinkback_templates import get_trackback_auto_discovery_tag # Embed a link in the header to subscribe trackbacks # TODO: This hack must be replaced with the introduction of the new web framework recordIndexInURI = uri.find('/' + CFG_SITE_RECORD + '/') # substring found --> offer trackback link in header if recordIndexInURI != -1: recid = uri[recordIndexInURI:len(uri)].split('/')[2].split("?")[0] #recid might end with ? for journal records headerLinkbackTrackbackLink = get_trackback_auto_discovery_tag(recid) if CFG_WEBSTYLE_INSPECT_TEMPLATES: inspect_templates_message = ''' <table width="100%%" cellspacing="0" cellpadding="2" border="0"> <tr bgcolor="#aa0000"> <td width="100%%"> <font color="#ffffff"> <strong> <small> CFG_WEBSTYLE_INSPECT_TEMPLATES debugging mode is enabled. Please hover your mouse pointer over any region on the page to see which template function generated it. </small> </strong> </font> </td> </tr> </table> ''' else: inspect_templates_message = "" sitename = CFG_SITE_NAME_INTL.get(ln, CFG_SITE_NAME) if headertitle == sitename: pageheadertitle = headertitle else: pageheadertitle = headertitle + ' - ' + sitename metabase = "" stripped_url = CFG_SITE_URL.replace("://", "") if not CFG_BASE_URL and '/' in stripped_url: metabase = "<base href='%s'>" % (CFG_SITE_URL,) out = """\ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="%(ln_iso_639_a)s" xml:lang="%(ln_iso_639_a)s" xmlns:og="http://opengraphprotocol.org/schema/" > <head> <title>%(pageheadertitle)s</title> %(metabase)s <link rev="made" href="mailto:%(sitesupportemail)s" /> <link rel="stylesheet" href="%(cssurl)s/img/invenio%(cssskin)s.css" type="text/css" /> <!--[if lt IE 8]> <link rel="stylesheet" type="text/css" href="%(cssurl)s/img/invenio%(cssskin)s-ie7.css" /> <![endif]--> <!--[if gt IE 8]> <style type="text/css">div.restrictedflag {filter:none;}</style> <![endif]--> %(canonical_and_alternate_urls)s <!-- <link rel="alternate" type="application/rss+xml" title="%(sitename)s RSS" href="%(rssurl)s" /> --> <link rel="search" type="application/opensearchdescription+xml" href="%(siteurl)s/opensearchdescription" title="%(sitename)s" /> <link rel="unapi-server" type="application/xml" title="unAPI" href="%(unAPIurl)s" /> <link rel="icon" href="/img/favicon.ico" type="image/x-icon"> <link rel="shortcut icon" href="/img/favicon.ico" type="image/x-icon"> %(linkbackTrackbackLink)s <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="%(ln)s" /> <meta name="description" content="%(description)s" /> <meta name="keywords" content="%(keywords)s" /> <meta name="google-site-verification" content="mLqufkdPNxUHXFW4obCfN5NJXr4sD_SlnvsOla7RZAE" /> <meta name="msvalidate.01" content="EA9805F0F62E4FF22B98853713964B28" /> <script type="text/javascript" src="%(cssurl)s/js/jquery.min.js"></script> %(hepDataAdditions)s %(metaheaderadd)s </head> <body%(body_css_classes)s lang="%(ln_iso_639_a)s"%(rtl_direction)s> <div class="pageheader"> %(inspect_templates_message)s <!-- replaced page header --> <div class="headerlogo"> <table class="headerbox" cellspacing="0"> <tr> <td align="right" valign="top" colspan="12"> <div class="headerboxbodylogo"> <a href="%(cssurl)s/?ln=%(ln)s">SCOAP<sup>3</sup> Repository (βeta)</a> </div> </td> </tr> <tr style="background-color: #679A70;"> <td style="padding: 10px; font-size: medium; color: #FFF;"><a href="/" style="text-decoration: none; color: #FFF;">HOME</a> :: <a href="http://scoap3.org/" style="text-decoration: none; color: #FFF;">SCOAP<sup>3</sup></a> :: <a href="http://scoap3.org/scoap3-repository-help" style="text-decoration: none; color: #FFF;">HELP</a> :: <a href="http://scoap3.org/scoap3-repository" style="text-decoration: none; color: #FFF;">ABOUT</a></td> </tr> <!-- <tr class="menu"> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(search_selected)s"> <a class="header%(search_selected)s" href="%(cssurl)s/?ln=%(ln)s">%(msg_search)s</a> </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(submit_selected)s"> <a class="header%(submit_selected)s" href="%(cssurl)s/submit?ln=%(ln)s">%(msg_submit)s</a> </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(personalize_selected)s"> %(useractivities)s </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(help_selected)s"> <a class="header%(help_selected)s" href="%(cssurl)s/help/%(langlink)s">%(msg_help)s</a> </td> %(adminactivities)s <td class="headermoduleboxbodyblanklast"> </td> </tr>--> </table> </div> <table class="navtrailbox"> <tr> <td class="navtrailboxbody"> %(navtrailbox)s </td> </tr> </table> <!-- end replaced page header --> %(pageheaderadd)s </div> """ % { 'metabase': metabase, 'rtl_direction': is_language_rtl(ln) and ' dir="rtl"' or '', 'siteurl': CFG_SITE_URL, 'sitesecureurl' : CFG_SITE_SECURE_URL, 'canonical_and_alternate_urls' : self.tmpl_canonical_and_alternate_urls(uri), 'cssurl' : CFG_BASE_URL, 'cssskin' : CFG_WEBSTYLE_TEMPLATE_SKIN != 'default' and '_' + CFG_WEBSTYLE_TEMPLATE_SKIN or '', 'rssurl': rssurl, 'ln' : ln, 'ln_iso_639_a' : ln.split('_', 1)[0], 'langlink': '?ln=' + ln, 'sitename' : CFG_SITE_NAME_INTL.get(ln, CFG_SITE_NAME), 'pageheadertitle': cgi.escape(pageheadertitle), 'sitesupportemail' : CFG_SITE_SUPPORT_EMAIL, 'description' : cgi.escape(description, True), 'keywords' : cgi.escape(keywords, True), 'metaheaderadd' : metaheaderadd, 'userinfobox' : userinfobox, 'navtrailbox' : navtrailbox, 'useractivities': useractivities_menu, 'adminactivities': adminactivities_menu and ('<td class="headermoduleboxbodyblank"> </td><td class="headermoduleboxbody%(personalize_selected)s">%(adminactivities)s</td>' % \ {'personalize_selected': navmenuid.startswith('admin') and "selected" or "", 'adminactivities': adminactivities_menu}) or '<td class="headermoduleboxbodyblank"> </td>', 'pageheaderadd' : pageheaderadd, 'body_css_classes' : body_css_classes and ' class="%s"' % ' '.join(body_css_classes) or '', 'search_selected': navmenuid == 'search' and "selected" or "", 'submit_selected': navmenuid == 'submit' and "selected" or "", 'personalize_selected': navmenuid.startswith('your') and "selected" or "", 'help_selected': navmenuid == 'help' and "selected" or "", 'msg_search' : _("Search"), 'msg_submit' : _("Submit"), 'msg_personalize' : _("Personalize"), 'msg_help' : _("Help"), 'unAPIurl' : cgi.escape('%s/unapi' % CFG_SITE_URL), 'linkbackTrackbackLink': headerLinkbackTrackbackLink, 'hepDataAdditions': hepDataAdditions, 'inspect_templates_message' : inspect_templates_message } return out
from invenio.config import CFG_SITE_URL, CFG_SITE_SECURE_URL, CFG_TMPDIR, \ CFG_SITE_RECORD, CFG_ACCESS_CONTROL_LEVEL_SITE from invenio.messages import wash_language from invenio.urlutils import redirect_to_url from invenio.errorlib import register_exception from invenio.webuser import get_preferred_user_language, isGuestUser, \ getUid, isUserSuperAdmin, collect_user_info from invenio.webinterface_handler_wsgi_utils import StringField from invenio.session import get_session ## The following variable is True if the installation make any difference ## between HTTP Vs. HTTPS connections. CFG_HAS_HTTPS_SUPPORT = CFG_SITE_SECURE_URL.startswith("https://") ## The following variable is True if HTTPS is used for *any* URL. CFG_FULL_HTTPS = CFG_SITE_URL.lower().startswith("https://") ## Set this to True in order to log some more information. DEBUG = False # List of URIs for which the 'ln' argument must not be added # automatically CFG_NO_LANG_RECOGNITION_URIS = ['/rss', '/oai2d', '/journal'] RE_SLASHES = re.compile('/+') RE_SPECIAL_URI = re.compile('^/%s/\d+|^/collection/.+' % CFG_SITE_RECORD)
from invenio.messages import wash_language from invenio.urlutils import redirect_to_url from invenio.errorlib import register_exception from invenio.webuser import get_preferred_user_language, isGuestUser, \ getUid, isUserSuperAdmin, collect_user_info, setUid from invenio.webinterface_handler_wsgi_utils import StringField from invenio.session import get_session from invenio import web_api_key ## The following variable is True if the installation make any difference ## between HTTP Vs. HTTPS connections. CFG_HAS_HTTPS_SUPPORT = CFG_SITE_SECURE_URL.startswith("https://") ## The following variable is True if HTTPS is used for *any* URL. CFG_FULL_HTTPS = CFG_SITE_URL.lower().startswith("https://") ## Set this to True in order to log some more information. DEBUG = False # List of URIs for which the 'ln' argument must not be added # automatically CFG_NO_LANG_RECOGNITION_URIS = ['/rss', '/oai2d', '/journal'] RE_SLASHES = re.compile('/+') RE_SPECIAL_URI = re.compile('^/%s/\d+|^/collection/.+' % CFG_SITE_RECORD)
def tmpl_pageheader(self, req, ln=CFG_SITE_LANG, headertitle="", description="", keywords="", userinfobox="", useractivities_menu="", adminactivities_menu="", navtrailbox="", pageheaderadd="", uid=0, secure_page_p=0, navmenuid="admin", metaheaderadd="", rssurl=CFG_BASE_URL+"/rss", body_css_classes=None): """Creates a page header Parameters: - 'ln' *string* - The language to display - 'headertitle' *string* - the title of the HTML page, not yet escaped for HTML - 'description' *string* - description goes to the metadata in the header of the HTML page, not yet escaped for HTML - 'keywords' *string* - keywords goes to the metadata in the header of the HTML page, not yet escaped for HTML - 'userinfobox' *string* - the HTML code for the user information box - 'useractivities_menu' *string* - the HTML code for the user activities menu - 'adminactivities_menu' *string* - the HTML code for the admin activities menu - 'navtrailbox' *string* - the HTML code for the navigation trail box - 'pageheaderadd' *string* - additional page header HTML code - 'uid' *int* - user ID - 'secure_page_p' *int* (0 or 1) - are we to use HTTPS friendly page elements or not? - 'navmenuid' *string* - the id of the navigation item to highlight for this page - 'metaheaderadd' *string* - list of further tags to add to the <HEAD></HEAD> part of the page - 'rssurl' *string* - the url of the RSS feed for this page - 'body_css_classes' *list* - list of classes to add to the body tag Output: - HTML code of the page headers """ # Including HEPData headers ( Ugly hack but no obvious way to avoid this ...) if CFG_INSPIRE_SITE: hepDataAdditions = """<script type="text/javascript" src="%s/js/hepdata.js"></script>""" \ % (CFG_BASE_URL, ) hepDataAdditions += """<link rel="stylesheet" href="%s/img/hepdata.css" type="text/css" />""" \ % (CFG_BASE_URL, ) else: hepDataAdditions = "" # load the right message language _ = gettext_set_language(ln) if body_css_classes is None: body_css_classes = [] body_css_classes.append(navmenuid) uri = req.unparsed_uri headerLinkbackTrackbackLink = '' if CFG_WEBLINKBACK_TRACKBACK_ENABLED: from invenio.weblinkback_templates import get_trackback_auto_discovery_tag # Embed a link in the header to subscribe trackbacks # TODO: This hack must be replaced with the introduction of the new web framework recordIndexInURI = uri.find('/' + CFG_SITE_RECORD + '/') # substring found --> offer trackback link in header if recordIndexInURI != -1: recid = uri[recordIndexInURI:len(uri)].split('/')[2].split("?")[0] #recid might end with ? for journal records headerLinkbackTrackbackLink = get_trackback_auto_discovery_tag(recid) if CFG_WEBSTYLE_INSPECT_TEMPLATES: inspect_templates_message = ''' <table width="100%%" cellspacing="0" cellpadding="2" border="0"> <tr bgcolor="#aa0000"> <td width="100%%"> <font color="#ffffff"> <strong> <small> CFG_WEBSTYLE_INSPECT_TEMPLATES debugging mode is enabled. Please hover your mouse pointer over any region on the page to see which template function generated it. </small> </strong> </font> </td> </tr> </table> ''' else: inspect_templates_message = "" sitename = CFG_SITE_NAME_INTL.get(ln, CFG_SITE_NAME) if headertitle == sitename: pageheadertitle = headertitle else: pageheadertitle = headertitle + ' - ' + sitename metabase = "" stripped_url = CFG_SITE_URL.replace("://", "") if not CFG_BASE_URL and '/' in stripped_url: metabase = "<base href='%s'>" % (CFG_SITE_URL,) out = """\ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/" lang="%(ln_iso_639_a)s" xml:lang="%(ln_iso_639_a)s"%(rtl_direction)s> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="%(ln)s" /> <title>%(pageheadertitle)s</title> %(metabase)s <link rev="made" href="mailto:%(sitesupportemail)s" /> <link rel="stylesheet" href="%(cssurl)s/img/invenio%(cssskin)s.css" type="text/css" /> <!--[if lt IE 8]> <link rel="stylesheet" type="text/css" href="%(cssurl)s/img/invenio%(cssskin)s-ie7.css" /> <![endif]--> <!--[if gt IE 8]> <style type="text/css">div.restrictedflag {filter:none;}</style> <![endif]--> %(canonical_and_alternate_urls)s <link rel="alternate" type="application/rss+xml" title="%(sitename)s RSS" href="%(rssurl)s" /> <link rel="search" type="application/opensearchdescription+xml" href="%(siteurl)s/opensearchdescription" title="%(sitename)s" /> <link rel="unapi-server" type="application/xml" title="unAPI" href="%(unAPIurl)s" /> %(linkbackTrackbackLink)s <meta name="description" content="%(description)s" /> <meta name="keywords" content="%(keywords)s" /> <script type="text/javascript" src="%(cssurl)s/js/jquery.min.js"></script> %(hepDataAdditions)s %(metaheaderadd)s </head> <body%(body_css_classes)s> <div class="pageheader"> %(inspect_templates_message)s <!-- replaced page header --> <div class="headerlogo"> <table class="headerbox" cellspacing="0"> <tr> <td align="right" valign="top" colspan="12"> <div class="userinfoboxbody"> %(userinfobox)s </div> <div class="headerboxbodylogo"> <a href="%(cssurl)s/?ln=%(ln)s">%(sitename)s</a> </div> </td> </tr> <tr class="menu"> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(search_selected)s"> <a class="header%(search_selected)s" href="%(cssurl)s/?ln=%(ln)s">%(msg_search)s</a> </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(submit_selected)s"> <a class="header%(submit_selected)s" href="%(cssurl)s/submit?ln=%(ln)s">%(msg_submit)s</a> </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(personalize_selected)s"> %(useractivities)s </td> <td class="headermoduleboxbodyblank"> </td> <td class="headermoduleboxbody%(help_selected)s"> <a class="header%(help_selected)s" href="%(cssurl)s/help/%(langlink)s">%(msg_help)s</a> </td> %(adminactivities)s <td class="headermoduleboxbodyblanklast"> </td> </tr> </table> </div> <table class="navtrailbox"> <tr> <td class="navtrailboxbody"> %(navtrailbox)s </td> </tr> </table> <!-- end replaced page header --> %(pageheaderadd)s </div> """ % { 'metabase': metabase, 'rtl_direction': is_language_rtl(ln) and ' dir="rtl"' or '', 'siteurl': CFG_SITE_URL, 'sitesecureurl' : CFG_SITE_SECURE_URL, 'canonical_and_alternate_urls' : self.tmpl_canonical_and_alternate_urls(uri), 'cssurl' : CFG_BASE_URL, 'cssskin' : CFG_WEBSTYLE_TEMPLATE_SKIN != 'default' and '_' + CFG_WEBSTYLE_TEMPLATE_SKIN or '', 'rssurl': rssurl, 'ln' : ln, 'ln_iso_639_a' : ln.split('_', 1)[0], 'langlink': '?ln=' + ln, 'sitename' : CFG_SITE_NAME_INTL.get(ln, CFG_SITE_NAME), 'pageheadertitle': cgi.escape(pageheadertitle), 'sitesupportemail' : CFG_SITE_SUPPORT_EMAIL, 'description' : cgi.escape(description, True), 'keywords' : cgi.escape(keywords, True), 'metaheaderadd' : metaheaderadd, 'userinfobox' : userinfobox, 'navtrailbox' : navtrailbox, 'useractivities': useractivities_menu, 'adminactivities': adminactivities_menu and ('<td class="headermoduleboxbodyblank"> </td><td class="headermoduleboxbody%(personalize_selected)s">%(adminactivities)s</td>' % \ {'personalize_selected': navmenuid.startswith('admin') and "selected" or "", 'adminactivities': adminactivities_menu}) or '<td class="headermoduleboxbodyblank"> </td>', 'pageheaderadd' : pageheaderadd, 'body_css_classes' : body_css_classes and ' class="%s"' % ' '.join(body_css_classes) or '', 'search_selected': navmenuid == 'search' and "selected" or "", 'submit_selected': navmenuid == 'submit' and "selected" or "", 'personalize_selected': navmenuid.startswith('your') and "selected" or "", 'help_selected': navmenuid == 'help' and "selected" or "", 'msg_search' : _("Search"), 'msg_submit' : _("Submit"), 'msg_personalize' : _("Personalize"), 'msg_help' : _("Help"), 'unAPIurl' : cgi.escape('%s/unapi' % CFG_SITE_URL), 'linkbackTrackbackLink': headerLinkbackTrackbackLink, 'hepDataAdditions': hepDataAdditions, 'inspect_templates_message' : inspect_templates_message } return out