# # Allows anyone who is authorized to log time be able to log time # as anyone else who is also authorized to log time. # module RedmineHacks class Hooks < Redmine::Hook::ViewListener def controller_timelog_edit_before_save(context={}) params = context[:params] time_entry = context[:time_entry] if params[:time_entry] && params[:time_entry][:user_id] user = User.find_by_id(params[:time_entry][:user_id]) if user && user.allowed_to?(:log_time, time_entry.project) time_entry.user = user end end end def view_timelog_edit_form_bottom(context={}) form = context[:form] time_entry = context[:time_entry] "

%s

" % form.select( :user_id, timelog_user_collection_for_select_options(time_entry), {:required => true}, {:size => time_entry.project.members.size} ) end protected def timelog_user_collection_for_select_options(time_entry) collection = time_entry.project.members.map{|member| member.user }.sort collection.keep_if{|user| user.allowed_to?(:log_time, time_entry.project)} if time_entry.user && !collection.include?(time_entry.user) collection << time_entry.user end s = '' collection.sort.each do |element| if time_entry.user && time_entry.user == element selected_attribute = ' selected="selected"' else selected_attribute = '' end s << %() end s.html_safe end end end