Chris@16: module Checkout Chris@16: class RepositoryHooks < Redmine::Hook::ViewListener Chris@16: # Renders the checkout URL Chris@16: # Chris@16: # Context: Chris@16: # * :project => Current project Chris@16: # * :repository => Current Repository Chris@16: # Chris@16: def view_repositories_show_contextual(context={}) Chris@16: if context[:repository].present? && Setting.checkout_display_checkout_info? Chris@16: protocols = context[:repository].checkout_protocols.select do |p| Chris@16: p.access_rw(User.current) Chris@16: end Chris@16: Chris@16: path = context[:controller].instance_variable_get("@path") Chris@16: if path && context[:controller].instance_variable_get("@entry") Chris@16: # a single file is showing, so we return only the directory Chris@16: path = File.dirname(path) Chris@16: end Chris@16: Chris@16: default = protocols.find(&:default?) || protocols.first Chris@16: Chris@16: context.merge!({ Chris@16: :protocols => protocols, Chris@16: :default_protocol => default, Chris@16: :checkout_path => path Chris@16: }) Chris@16: Chris@16: options = {:partial => "redmine_checkout_hooks/view_repositories_show_contextual"} chris@1315: chris@1315: # cc: cribbed from chris@1315: # http://www.redmine.org/projects/redmine/repository/revisions/9785/diff/trunk/lib/redmine/hook.rb chris@1315: # for http://www.redmine.org/issues/11105 (formerly used chris@1315: # render_to_string on this controller, wasn't working for chris@1315: # :header_tags) chris@1315: context[:hook_caller].send(:render, {:locals => context}.merge(options)) Chris@16: end Chris@16: end Chris@16: end chris@1315: end