require 'scrivito/cms_routing' module Scrivito class CmsRouting def convert_links(html) if html # v-- patch here html.to_str.gsub(%r{\bobjid:([a-f0-9]{4,})\b([^"']*)}) do if obj = Obj.find_by_id($1) options = {} if $2.present? begin uri = URI.parse($2) options.merge!(extract_query(uri)) options[:anchor] = uri.fragment rescue end end if editing_context.display_mode == 'editing' options[:id] = obj.id scrivito_engine.base_id_path(options) else path_or_url(obj, :path, options) end else "#__target_object_not_reachable" end end end end # patch for handling direct descendants of Scrivito::BasicObj def path_or_url_without_editing_context(target, path_or_url, options) if target.is_a?(Link) path_or_url_for_links(target, path_or_url, options) elsif target.is_a?(::Scrivito::BasicObj) # <-- patch here path_or_url_for_objs(target, path_or_url, options) elsif target.respond_to?(:first) if target.first.is_a?(Link) path_or_url_for_links(target.first, path_or_url, options) else return LINK_TO_EMPTY_LINKLIST end elsif target.is_a?(Binary) binary_url(target) else raise "scrivito_path or scrivito_url was called with an instance of #{target.class}. "+ "It must only be called with an Obj or a Link or a non-empty LinkList." end end # Use fiona connector permalinks and binary urls in legacy mode def path_or_url_for_objs(obj, path_or_url, options) permalink = obj.permalink if permalink && (route = find_route(:permalink)) && permalink.split('/').first != 'scrivito' # -- patch here -- if Fiona7.mode == :legacy context.public_send("cms_permalink_#{path_or_url}", options.merge(:permalink => permalink)) else route.generate(path_or_url, options.merge(:permalink => permalink)) end # -- patch ends here -- elsif homepage?(obj) && route = find_route(:homepage) route.generate(path_or_url, options) elsif obj.binary? # -- patch here -- if Fiona7.mode == :legacy && self.image_options.blank? if binary = obj.binary params = { id: obj.id, slug: obj.slug, format: obj.file_extension } # use fiona connector routes when possible context.public_send("cms_id_#{path_or_url}", params) else LINK_TO_EMPTY_BLOB end else binary_obj_url(obj) || LINK_TO_EMPTY_BLOB end # -- patch ends here -- elsif route = find_route(:slug_id) slug = obj.slug.present? ? obj.slug.sub(/^\//, '') : nil route.generate(path_or_url, options.merge(id: obj.id, slug: slug)) else raise ScrivitoError, "The required scrivito route 'slug_id' is not defined. "\ "Please add a 'slug_id' definition to your routes.rb. See the documentation"\ " of 'scrivito_route' for further details." end end end end