app/helpers/rb_server_variables_helper.rb
module RbServerVariablesHelper
unloadable
# Calculates workflow transitions matrix.
# Used to render server variables for javascript DnD handling
#
# workflow_transitions(RbStory)
def workflow_transitions(klass)
default_status = IssueStatus.default
default_status = default_status.id.to_s if default_status
roles = User.current.admin ? Role.all : User.current.roles_for_project(@project)
transitions = {:states => {}, :transitions => {} , :default => default_status }
klass.trackers.each {|tracker_id|
tracker = Tracker.find(tracker_id)
tracker_id = tracker_id.to_s
transitions[:transitions][tracker_id] = {}
tracker.issue_statuses.each {|status|
status_id = status.id.to_s
transitions[:states][status_id] = {:name => status.name, :closed => (status.is_closed? ? l(:label_closed_issues) + ' ' : '')}
[[false, false], [true, true], [false, true], [true, false]].each{|creator, assignee|
key = "#{creator ? '+' : '-'}c#{assignee ? '+' : '-'}a"
transitions[:transitions][tracker_id][key] ||= {}
begin
allowed_statues = status.new_statuses_allowed_to(roles, tracker, creator, assignee)
rescue #Workaround in order to support redmine 1.1.3
allowed_statues = status.new_statuses_allowed_to(roles, tracker)
end
allowed = allowed_statues.collect{|s| s.id.to_s}
transitions[:transitions][tracker_id][key][:default] ||= allowed[0]
allowed.unshift(status_id)
transitions[:transitions][tracker_id][key][status_id] = allowed.compact.uniq
}
}
}
transitions
end
end