Class: StoreController
- Inherits:
-
UmlautController
- Object
- ApplicationController
- UmlautController
- StoreController
- Defined in:
- app/controllers/store_controller.rb
Instance Method Summary collapse
Methods included from Umlaut::ControllerBehavior
#default_url_options, #set_locale
Methods included from UmlautConfigurable
Instance Method Details
#index ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'app/controllers/store_controller.rb', line 8 def index perm = Permalink.where(:id => params[:id]).first handle_404_error and return unless perm # not in our db co = OpenURL::ContextObject.new # We might have a link to a Referent in our db, or we might # instead have to rely on an XML serialized ContextObject in # the permalink, if the Referent has been purged. Either way # we're good. referent = nil if (perm.referent) referent = perm.referent elsif (perm.context_obj_serialized) stored_co = perm.restore_context_object # And a referrent, no referrer for now, we'll restore it later. referent = Referent.create_by_context_object(stored_co, :permalink => false) perm.referent = referent end # We can't find a referent or succesfully restore an xml context # object to send the user to the request. We can not resolve # this permalink! handle_404_error and return unless referent perm.last_access = Time.now # keep track of when permalink last actually retrieved # will catch possible new referent to be saved, as well as # update to last_access perm.save! # Whether it was an already existing one, or a newly created one # turn it back to a co so we can add a few more things. co.import_context_object(referent.to_context_object) # We preserve original referrer. Even though this isn't entirely accurate # this is neccesary to get SFX to handle it properly when we call to SFX, # including handling source-specific private data, etc. co.referrer.add_identifier(perm.orig_rfr_id) if perm.orig_rfr_id # Let's add any supplementary umlaut params passed to us # Everything except the 'id' which we used for the Rails action. new_params = params.clone new_params.delete(:id) # and add in our new action new_params[:controller] = 'resolve' new_params[:action] = 'index' # Plus let's tell it about the referent, to make sure we get a referent # match even though we've changed the rfr_id etc. new_params[:'umlaut.referent_id'] = referent.id # Generate a Rails URL, then add on the KEV for our CO on the end # You might think you can just merge these into a hash and use url_for, # but Rails redirect_to/url_for isn't happy with multiple query params # with same name. redirect_to(url_for_with_co(new_params, co)) end |