123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- # frozen_string_literal: true
-
- # Redmine - project management software
- # Copyright (C) 2006-2020 Jean-Philippe Lang
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
- module WorkflowsHelper
- def options_for_workflow_select(name, objects, selected, options={})
- option_tags = ''.html_safe
- multiple = false
- if selected
- if selected.size == objects.size
- selected = 'all'
- else
- selected = selected.map(&:id)
- if selected.size > 1
- multiple = true
- end
- end
- else
- selected = objects.first.try(:id)
- end
- all_tag_options = {:value => 'all', :selected => (selected == 'all')}
- if multiple
- all_tag_options[:style] = "display:none;"
- end
- option_tags << content_tag('option', l(:label_all), all_tag_options)
- option_tags << options_from_collection_for_select(objects, "id", "name", selected)
- select_tag name, option_tags, {:multiple => multiple}.merge(options)
- end
-
- def field_required?(field)
- field.is_a?(CustomField) ? field.is_required? : %w(project_id tracker_id subject priority_id is_private).include?(field)
- end
-
- def field_permission_tag(permissions, status, field, roles)
- name = field.is_a?(CustomField) ? field.id.to_s : field
- options = [["", ""], [l(:label_readonly), "readonly"]]
- options << [l(:label_required), "required"] unless field_required?(field)
- html_options = {}
-
- if perm = permissions[status.id][name]
- if perm.uniq.size > 1 || perm.size < @roles.size * @trackers.size
- options << [l(:label_no_change_option), "no_change"]
- selected = 'no_change'
- else
- selected = perm.first
- end
- end
-
- hidden = field.is_a?(CustomField) &&
- !field.visible? &&
- !roles.detect {|role| role.custom_fields.to_a.include?(field)}
-
- if hidden
- options[0][0] = l(:label_hidden)
- selected = ''
- html_options[:disabled] = true
- end
-
- select_tag("permissions[#{status.id}][#{name}]", options_for_select(options, selected), html_options)
- end
-
- def transition_tag(transition_count, old_status, new_status, name)
- w = transition_count
- tag_name = "transitions[#{ old_status.try(:id) || 0 }][#{new_status.id}][#{name}]"
- if old_status == new_status
- check_box_tag(tag_name, "1", true,
- {:disabled => true, :class => "old-status-#{old_status.try(:id) || 0} new-status-#{new_status.id}"})
- elsif w == 0 || w == @roles.size * @trackers.size
- hidden_field_tag(tag_name, "0", :id => nil) +
- check_box_tag(tag_name, "1", w != 0,
- :class => "old-status-#{old_status.try(:id) || 0} new-status-#{new_status.id}")
- else
- select_tag(
- tag_name,
- options_for_select(
- [
- [l(:general_text_Yes), "1"],
- [l(:general_text_No), "0"],
- [l(:label_no_change_option), "no_change"]
- ],
- "no_change")
- )
- end
- end
- end
|