--- app/controllers/timelog_controller.rb +++ app/controllers/timelog_controller.rb @@ -100,7 +100,12 @@ end def create - @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today) + if request.post? and User.current.allowed_to?(:log_foreign_time, @project) + user = User.find(params[:time_entry][:user_id]) + else + user = User.current + end + @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => user, :spent_on => User.current.today) @time_entry.safe_attributes = params[:time_entry] if @time_entry.project && !User.current.allowed_to?(:log_time, @time_entry.project) render_403 --- app/helpers/timelog_helper.rb +++ app/helpers/timelog_helper.rb @@ -55,6 +55,18 @@ collection end + def user_collection_for_select_options(project, selected = nil) + collection = project.members.map{ |member| member.user } + collection.keep_if{ |user| user.allowed_to?(:log_time, project) } + s = '' + s << content_tag('option', "<< #{l(:lable_me)} >>", :value => User.current.id) if User.current.admin? || collection.include?(User.current) + collection.sort.each do |element| + selected_attribute = ' selected="selected"' if option_value_selected?(element, selected) + s << %() + end + s.html_safe + end + def select_hours(data, criteria, value) if value.to_s.empty? data.select {|row| row[criteria].blank? } --- app/views/timelog/_form.html.erb +++ app/views/timelog/_form.html.erb @@ -17,6 +17,9 @@

<%= f.text_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %>

<%= f.text_field :hours, :size => 6, :required => true %>

+ <% if User.current.allowed_to?(:log_foreign_time, @project) %> +

<%= f.select :user_id, user_collection_for_select_options(@project, @time_entry.user), :required => true %>

+ <% end %>

<%= f.text_field :comments, :size => 100, :maxlength => 255 %>

<%= f.select :activity_id, activity_collection_for_select_options(@time_entry), :required => true %>

<% @time_entry.custom_field_values.each do |value| %> --- config/locales/cs.yml +++ config/locales/cs.yml @@ -424,0 +424,1 @@ + permission_log_foreign_time: Přidat stáveny čas jiným uživatelům --- config/locales/en.yml +++ config/locales/en.yml @@ -474,0 +474,1 @@ + permission_log_foreign_time: Add time logs for other users --- lib/redmine.rb +++ lib/redmine.rb @@ -131,6 +131,7 @@ map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member + map.permission :log_foreign_time, {:timelog => [:new, :create]}, :require => :member end map.project_module :news do |map|