from oilsweb.lib.base import *
import logging
-import pylons
import oilsweb.lib.context
import oilsweb.lib.util
import oilsweb.lib.acq.search
class AcqController(BaseController):
def index(self):
- c.oils = oilsweb.lib.context.Context.init(request)
+ c.oils = oilsweb.lib.context.Context.init(request, response)
return render('oils/%s/acq/index.html' % c.oils.core.skin)
def search(self):
- c.oils = Context.init(request)
+ c.oils = Context.init(request, response)
c.oils_z39_sources = oilsweb.lib.acq.search.fetch_z39_sources(c.oils)
sc = {}
def pl_builder(self):
- ctx = oilsweb.lib.context.Context.init(request)
+ ctx = oilsweb.lib.context.Context.init(request, response)
# add logic to see where we are fetching bib data from
if ctx.acq.search_source:
return oilsweb.lib.acq.search.multi_search(ctx, search)
def rdetails(self):
- c.oils = oilsweb.lib.context.Context.init(request)
+ c.oils = oilsweb.lib.context.Context.init(request, response)
rec_id = c.oils.acq.record_id
cache_key = c.oils.acq.search_cache_key
def create_picklist(self):
- ctx = oilsweb.lib.context.Context.init(request)
+ ctx = oilsweb.lib.context.Context.init(request, response)
if not isinstance(ctx.acq.picklist_item, list):
ctx.acq.picklist_item = [ctx.acq.picklist_item]
import pprint
# Parse IDL and render as links for viewing the objects, perhaps?
- c.oils = oilsweb.lib.context.Context.init(request)
+ c.oils = oilsweb.lib.context.Context.init(request, response)
c.request = request
oilsConnect('/openils/conf/opensrf_core.xml', 'config.opensrf')
c.idl = oils.utils.idl.oilsGetIDLParser()
from oilsweb.lib.context import Context, SubContext, ContextItem
import osrf.ses, oils.utils.csedit, pylons.config
+from gettext import gettext as _
+
+class AuthException(Exception):
+ def __init__(self, info=''):
+ self.info = info
+ def __str__(self):
+ return "%s: %s" % (self.__class__.__name__, unicode(self.info))
+
+
class CoreContext(SubContext):
def __init__(self):
- self.prefix = ContextItem() # web prefi
+ self.prefix = ContextItem() # web prefix
self.media_prefix = ContextItem() # media prefix
self.ac_prefix = ContextItem() # added content prefix
self.skin = ContextItem() # web skin
self.theme = ContextItem() # web theme
- self.authtoken = ContextItem(cgi_name='ses') # authtoken string
+ self.authtoken = ContextItem(cgi_name='ses', cookie=True) # authtoken string
self.user = ContextItem() # logged in user object
self.workstation = ContextItem() # workstation object
self.user = osrf.ses.AtomicRequest(
'open-ils.auth',
'open-ils.auth.session.retrieve', self.authtoken)
+
+ if not self.user:
+ raise AuthException(_('No user found with authtoken %(self.authtoken)s'))
self.workstation = oils.utils.csedit.CSEditor().retrieve_actor_workstation(self.user.wsid())
+ if not self.workstation:
+ raise AuthException(_('No workstation found'))
+
# cache the auth data and destroy any old auth data
CoreContext._auth_cache = {
self.authtoken : {
'workstation' : self.workstation
}
}
+ else:
+ raise AuthException(_('No authentication token provided'))
Context.applySubContext('core', CoreContext)
self.default_value = kwargs.get('default_value')
self.qname = None
self.multi = kwargs.get('multi')
+ self.cookie = kwargs.get('cookie')
class SubContext(object):
''' A SubContext is a class-specific context object that lives inside the global context object '''
def __init__(self):
self._fields = []
+ self._req = None
+ self._resp = None
def make_query_string(self):
''' Compiles a CGI query string from the collection of values
q = ''
for f in self._fields:
- if f.cgi_name:
+ if f.cgi_name and not f.cookie:
val = getattr(getattr(self, f.app), f.name)
if val != f.default_value:
if isinstance(val, list):
return q
+ def apply_cookies(self):
+ for f in self._fields:
+ if f.cgi_name and f.cookie:
+ val = getattr(getattr(self, f.app), f.name)
+ if isinstance(val, str) or isinstance(val, unicode):
+ self._resp.set_cookie(f.cgi_name, val) # config var for timeout?
+
+
@staticmethod
def applySubContext(app, ctx):
global _subContexts
return _context
@staticmethod
- def init(req):
+ def init(req, resp):
global _context, _subContexts
c = _context = Context()
+ c._req = req
+ c._resp = resp
childInit()
for app, ctx in _subContexts.iteritems():
ctx = ctx()
setattr(c, app, ctx)
for name in ctx._fields():
+
item = getattr(ctx, name)
item.app = app
item.name = name
c._fields.append(item)
- if item.cgi_name and item.cgi_name in req.params:
- if item.multi:
- setattr(getattr(c, app), name, req.params.getall(item.cgi_name))
+
+ set = False
+ if item.cgi_name:
+ if item.cgi_name in req.params:
+ if item.multi:
+ setattr(getattr(c, app), name, req.params.getall(item.cgi_name))
+ else:
+ setattr(getattr(c, app), name, req.params[item.cgi_name])
+ set = True
else:
- setattr(getattr(c, app), name, req.params[item.cgi_name])
- else:
+ if item.cookie and item.cgi_name in req.cookies:
+ setattr(getattr(c, app), name, req.cookies[item.cgi_name])
+ set = True
+
+ if not set:
setattr(getattr(c, app), name, item.default_value)
# store the metatdata at <name>_
#oils-acq-index-block { font-weight:bold; }
+
+/* bib search */
#oils-acq-search-container { width:100%; }
#oils-acq-search-sources-block { width:32%; vertical-align: top; float: left; margin-right: 10px;}
#oils-acq-search-form-block { width:63%; vertical-align: top; float:right; }
.oils-acq-search-form-row { width: 100%; }
.oils-acq-search-form-label {}
.oils-acq-search-form-input {}
-
#oils-acq-search-sources-list { padding: 1px; }
#oils-acq-search-sources-list li { list-style-type: none; padding-left: 0px; }
.oils-acq-search-sources-sublist { padding: 1px; list-style-type: none;}
#oils-acq-search-fields-label { margin-bottom: 10px; }
#oils-acq-search-fields-submit-block { margin: 5px; text-align: center;}
+/* bib search results / picklist builder interface */
#oils-acq-pl_builder-table { width: 100%; }
.oils-acq-record_list-records-jacket { width: 42px; height: 54px; padding-left: 10px; }
.oils-acq-record_list-records-title-row {}
#oils-acq-picklist-table { width: 100%; }
+
+