diff --git a/app/controllers/.versions_controller.rb.swp b/app/controllers/.versions_controller.rb.swp new file mode 100644 index 0000000..bfaef6e Binary files /dev/null and b/app/controllers/.versions_controller.rb.swp differ diff --git a/app/controllers/enumerations_controller.rb b/app/controllers/enumerations_controller.rb index a3d4e47..d09cd38 100644 --- a/app/controllers/enumerations_controller.rb +++ b/app/controllers/enumerations_controller.rb @@ -25,7 +25,7 @@ class EnumerationsController < ApplicationController before_action :require_admin_or_api_request, :only => :index before_action :build_new_enumeration, :only => [:new, :create] before_action :find_enumeration, :only => [:edit, :update, :destroy] - accept_api_auth :index + accept_api_auth :index, :update helper :custom_fields diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 65caee6..10d2784 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -184,11 +184,13 @@ class IssuesController < ApplicationController respond_to do |format| format.html { redirect_back_or_default issue_path(@issue, previous_and_next_issue_ids_params) } + format.js { head 200 } format.api { render_api_ok } end else respond_to do |format| format.html { render :action => 'edit' } + format.js { head 422 } format.api { render_validation_errors(@issue) } end end diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb index 15c24a8..18b2027 100644 --- a/app/controllers/versions_controller.rb +++ b/app/controllers/versions_controller.rb @@ -52,7 +52,8 @@ class VersionsController < ApplicationController includes(:project, :tracker). preload(:status, :priority, :fixed_version). where(:tracker_id => @selected_tracker_ids, :project_id => project_ids, :fixed_version_id => @versions.map(&:id)). - order("#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id") + #order("#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id") + order(order_issues_by) @issues_by_version = issues.group_by(&:fixed_version) end @versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?} @@ -69,7 +70,8 @@ class VersionsController < ApplicationController @issues = @version.fixed_issues.visible. includes(:status, :tracker, :priority). preload(:project). - reorder("#{Tracker.table_name}.position, #{Issue.table_name}.id"). + #reorder("#{Tracker.table_name}.position, #{Issue.table_name}.id"). + reorder(order_issues_by). to_a } format.api @@ -173,6 +175,14 @@ class VersionsController < ApplicationController end end + def order_issues_by + if Setting.manual_issue_position_in_versions == '1' + return "COALESCE(#{Issue.table_name}.position, 999999)" + else + return "#{Tracker.table_name}.position, #{Issue.table_name}.id" + end + end + private def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil) diff --git a/app/models/issue.rb b/app/models/issue.rb index efb55fa..27c50c0 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -54,6 +54,8 @@ class Issue < ActiveRecord::Base acts_as_activity_provider :scope => preload(:project, :author, :tracker, :status), :author_key => :author_id + acts_as_positioned :scope => [:fixed_version_id] + DONE_RATIO_OPTIONS = %w(issue_field issue_status) attr_writer :deleted_attachment_ids @@ -494,6 +496,10 @@ class Issue < ActiveRecord::Base (issue.new_record? || issue.attributes_editable?(user)) && user.allowed_to?(:manage_subtasks, issue.project) }) + safe_attributes( + 'position', + :if => lambda {|issue, user| user.allowed_to?(:change_issue_position_in_version, issue.project)} + ) safe_attributes( 'deleted_attachment_ids', :if => lambda {|issue, user| issue.attachments_deletable?(user)}) @@ -832,7 +838,7 @@ class Issue < ActiveRecord::Base # Returns the names of attributes that are journalized when updating the issue def journalized_attribute_names - names = Issue.column_names - %w(id root_id lft rgt lock_version created_on updated_on closed_on) + names = Issue.column_names - %w(id root_id lft rgt lock_version position created_on updated_on closed_on) if tracker names -= tracker.disabled_core_fields end diff --git a/app/views/settings/_issues.html.erb b/app/views/settings/_issues.html.erb index b4e50d8..e363c18 100644 --- a/app/views/settings/_issues.html.erb +++ b/app/views/settings/_issues.html.erb @@ -15,6 +15,8 @@
<%= setting_check_box :display_subprojects_issues %>
+<%= setting_check_box :manual_issue_position_in_versions %>
+<%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %>
<%= setting_multiselect :non_working_week_days, (1..7).map {|d| [day_name(d), d.to_s]}, :inline => true %>
diff --git a/app/views/versions/index.html.erb b/app/views/versions/index.html.erb index afe9b46..5d64d09 100644 --- a/app/views/versions/index.html.erb +++ b/app/views/versions/index.html.erb @@ -32,14 +32,19 @@ <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%><%= check_box_tag 'ids[]', issue.id, false, :id => nil %> | -<%= assignee_avatar(issue.assigned_to, :size => 16) %> | -<%= link_to_issue(issue, :project => (@project != issue.project)) %> | -<%= link_to_context_menu %> | -|
<%= check_box_tag 'ids[]', issue.id, false, :id => nil %> | +<%= assignee_avatar(issue.assigned_to, :size => 16) %> | +<%= link_to_issue(issue, :project => (@project != issue.project)) %> | +<%= link_to_context_menu %> | + <% if Setting.manual_issue_position_in_versions == '1' && User.current.allowed_to?(:change_issue_position_in_version, version.project) %> +<%= reorder_handle(issue) %> | + <% end%> +
<%= check_box_tag 'ids[]', issue.id, false, :id => nil %> | -<%= assignee_avatar(issue.assigned_to, :size => 16) %> | -<%= link_to_issue(issue, :project => (@project != issue.project)) %> | -<%= link_to_context_menu %> | -|
<%= check_box_tag 'ids[]', issue.id, false, :id => nil %> | +<%= assignee_avatar(issue.assigned_to, :size => 16) %> | +<%= link_to_issue(issue, :project => (@project != issue.project)) %> | +<%= link_to_context_menu %> | + <% if Setting.manual_issue_position_in_versions == '1' && !@version.closed? && User.current.allowed_to?(:change_issue_position_in_version, @version.project) %> +<%= reorder_handle(issue) %> | + <% end%> +