Commit cb10c0e1d05a3384ab18b12b57b6260c59a66bd9

Authored by Daniela Feitosa
1 parent 091b7cf1

Fixed language_chooser to avoid crashes of themes

app/helpers/language_helper.rb
@@ -13,19 +13,20 @@ module LanguageHelper @@ -13,19 +13,20 @@ module LanguageHelper
13 13
14 alias :calendar_date_select_language :tinymce_language 14 alias :calendar_date_select_language :tinymce_language
15 15
16 - def language_chooser(environment, options = {})  
17 - return if environment.locales.size < 2 16 + def language_chooser(environment=nil, options = {})
  17 + locales = environment.nil? ? Noosfero.locales : environment.locales
  18 + return if locales.size < 2
18 current = language 19 current = language
19 separator = options[:separator] || ' &mdash; ' 20 separator = options[:separator] || ' &mdash; '
20 21
21 if options[:element] == 'dropdown' 22 if options[:element] == 'dropdown'
22 select_tag('lang', 23 select_tag('lang',
23 - options_for_select(environment.locales.map{|code,name| [name, code]}, current), 24 + options_for_select(locales.map{|code,name| [name, code]}, current),
24 :onchange => "document.location.href= #{url_for(params.merge(:lang => 'LANGUAGE')).inspect}.replace(/LANGUAGE/, this.value) ;", 25 :onchange => "document.location.href= #{url_for(params.merge(:lang => 'LANGUAGE')).inspect}.replace(/LANGUAGE/, this.value) ;",
25 :help => _('The language you choose here is the language used for options, buttons, etc. It does not affect the language of the content created by other users.') 26 :help => _('The language you choose here is the language used for options, buttons, etc. It does not affect the language of the content created by other users.')
26 ) 27 )
27 else 28 else
28 - languages = environment.locales.map do |code,name| 29 + languages = locales.map do |code,name|
29 if code == current 30 if code == current
30 content_tag('strong', name) 31 content_tag('strong', name)
31 else 32 else
test/unit/language_helper_test.rb
@@ -65,6 +65,22 @@ class LanguageHelperTest &lt; ActiveSupport::TestCase @@ -65,6 +65,22 @@ class LanguageHelperTest &lt; ActiveSupport::TestCase
65 assert result.blank? 65 assert result.blank?
66 end 66 end
67 67
  68 + should 'get noosfero locales if environment is not defined' do
  69 + self.expects(:language).returns('en')
  70 + Noosfero.expects(:locales).returns({ 'en' => 'English', 'pt_BR' => 'Português Brasileiro' }).at_least_once
  71 + result = self.language_chooser
  72 + assert_match /Português Brasileiro/, result
  73 + assert_match /English/, result
  74 + end
  75 +
  76 + should 'get noosfero locales if environment is not defined and has options' do
  77 + self.expects(:language).returns('en')
  78 + Noosfero.expects(:locales).returns({ 'en' => 'English', 'pt_BR' => 'Português Brasileiro' }).at_least_once
  79 + result = self.language_chooser(nil, :separator=>"<span class=\"language-separator\"/>")
  80 + assert_match /Português Brasileiro/, result
  81 + assert_match /English/, result
  82 + end
  83 +
68 protected 84 protected
69 include NoosferoTestHelper 85 include NoosferoTestHelper
70 include ActionView::Helpers::FormOptionsHelper 86 include ActionView::Helpers::FormOptionsHelper