diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb
index 2d4fdfc05..000f52e30 100644
--- a/app/views/welcome/index.html.erb
+++ b/app/views/welcome/index.html.erb
@@ -1,5 +1,7 @@
<%= l(:label_home) %>
+<%= "Ö".downcase %>
+
<%= textilizable Setting.welcome_text %>
<% if @news.any? %>
diff --git a/lib/plugins/acts_as_searchable/lib/acts_as_searchable.rb b/lib/plugins/acts_as_searchable/lib/acts_as_searchable.rb
index fa5fa202b..37c8b400d 100644
--- a/lib/plugins/acts_as_searchable/lib/acts_as_searchable.rb
+++ b/lib/plugins/acts_as_searchable/lib/acts_as_searchable.rb
@@ -86,7 +86,7 @@ module Redmine
columns = searchable_options[:columns]
columns = columns[0..0] if options[:titles_only]
- token_clauses = columns.collect {|column| "(LOWER(#{column}) LIKE ?)"}
+ token_clauses = columns.collect {|column| "(LOWER(#{column}) LIKE LOWER(?))"}
if !options[:titles_only] && searchable_options[:search_custom_fields]
searchable_custom_fields = CustomField.where(:type => "#{self.name}CustomField", :searchable => true)
@@ -97,7 +97,7 @@ module Redmine
fields_by_visibility.each do |visibility, fields|
ids = fields.map(&:id).join(',')
sql = "#{table_name}.id IN (SELECT cfs.customized_id FROM #{CustomValue.table_name} cfs" +
- " WHERE cfs.customized_type='#{self.name}' AND cfs.customized_id=#{table_name}.id AND LOWER(cfs.value) LIKE ?" +
+ " WHERE cfs.customized_type='#{self.name}' AND cfs.customized_id=#{table_name}.id AND LOWER(cfs.value) LIKE LOWER(?)" +
" AND cfs.custom_field_id IN (#{ids})" +
" AND #{visibility})"
token_clauses << sql
@@ -106,7 +106,7 @@ module Redmine
sql = (['(' + token_clauses.join(' OR ') + ')'] * tokens.size).join(options[:all_words] ? ' AND ' : ' OR ')
- tokens_conditions = [sql, * (tokens.collect {|w| "%#{w.downcase}%"} * token_clauses.size).sort]
+ tokens_conditions = [sql, * (tokens.collect {|w| "%#{w}%"} * token_clauses.size).sort]
scope = (searchable_options[:scope] || self)
if scope.is_a? Proc
diff --git a/test/unit/search_test.rb b/test/unit/search_test.rb
index c98982e8a..48f39033d 100644
--- a/test/unit/search_test.rb
+++ b/test/unit/search_test.rb
@@ -1,3 +1,5 @@
+# encoding: utf-8
+#
# Redmine - project management software
# Copyright (C) 2006-2014 Jean-Philippe Lang
#
@@ -137,6 +139,13 @@ class SearchTest < ActiveSupport::TestCase
assert_equal issue, r.first
end
+ def test_search_should_not_use_ruby_downcase
+ issue = Issue.generate!(:subject => "Special chars: ÖÖ")
+ r = Issue.search_results('%ÖÖ%')
+ assert_equal 1, r.size
+ assert_equal issue, r.first
+ end
+
private
def remove_permission(role, permission)