From 7ffb825d6775449ec842f5b66b1eb4d8fbc37765 Mon Sep 17 00:00:00 2001 From: elijah Date: Sun, 7 Jun 2015 23:34:25 -0700 Subject: initial commit --- lib/redmine_hacks/timelog_hooks.rb | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 lib/redmine_hacks/timelog_hooks.rb (limited to 'lib') diff --git a/lib/redmine_hacks/timelog_hooks.rb b/lib/redmine_hacks/timelog_hooks.rb new file mode 100644 index 0000000..ad2e13f --- /dev/null +++ b/lib/redmine_hacks/timelog_hooks.rb @@ -0,0 +1,52 @@ +# +# 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 -- cgit v1.2.3