1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
module ActiveLdap
module Helper
def ldap_attribute_name_gettext(attribute)
Base.human_attribute_name(attribute)
end
alias_method(:la_, :ldap_attribute_name_gettext)
def ldap_attribute_description_gettext(attribute)
Base.human_attribute_description(attribute)
end
alias_method(:lad_, :ldap_attribute_description_gettext)
def ldap_object_class_name_gettext(object_class)
Base.human_object_class_name(object_class)
end
alias_method(:loc_, :ldap_object_class_name_gettext)
def ldap_object_class_description_gettext(object_class)
Base.human_object_class_description(object_class)
end
alias_method(:locd_, :ldap_object_class_description_gettext)
def ldap_syntax_name_gettext(syntax)
Base.human_syntax_name(syntax)
end
alias_method(:ls_, :ldap_syntax_name_gettext)
def ldap_syntax_description_gettext(syntax)
Base.human_syntax_description(syntax)
end
alias_method(:lsd_, :ldap_syntax_description_gettext)
def ldap_field(type, object_name, method, options={})
case type
when "radio_button", "check_box", "text_area"
form_method = type
else
form_method = "#{type}_field"
end
object = options[:object]
if object.nil?
normalized_object_name = object_name.to_s.sub(/\[\](\])?$/, "\\1")
object = instance_variable_get("@#{normalized_object_name}")
end
values = object.nil? ? nil : object[method, true]
values = [nil] if values.blank?
required_ldap_options = options.delete(:ldap_options) || []
required_ldap_options.each do |required_ldap_option|
found = false
values.each do |value|
next unless value.is_a?(Hash)
if Hash.to_a[0].to_s == required_ldap_option.to_s
found = true
break
end
end
values << {required_ldap_option => ""} unless found
end
fields = []
collect_values = Proc.new do |value, ldap_options|
case value
when Hash
value.each do |k, v|
collect_values.call(v, ldap_options + [k])
end
when Array
value.each do |v|
collect_values.call(v, ldap_options)
end
else
id = "#{object_name}_#{method}"
name = "#{object_name}[#{method}][]"
ldap_options.collect.each do |ldap_option|
id << "_#{ldap_option}"
name << "[#{ldap_option}][]"
end
ldap_value_options = {:id => id, :name => name, :value => value}
field = send(form_method, object_name, method,
ldap_value_options.merge(options))
if block_given?
field = yield(field, {:options => ldap_options, :value => value})
end
fields << field unless field.blank?
end
end
collect_values.call(values, [])
fields.join("\n")
end
end
end
|