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 13  
14 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 19 current = language
19 20 separator = options[:separator] || ' &mdash; '
20 21  
21 22 if options[:element] == 'dropdown'
22 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 25 :onchange => "document.location.href= #{url_for(params.merge(:lang => 'LANGUAGE')).inspect}.replace(/LANGUAGE/, this.value) ;",
25 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 28 else
28   - languages = environment.locales.map do |code,name|
  29 + languages = locales.map do |code,name|
29 30 if code == current
30 31 content_tag('strong', name)
31 32 else
... ...
test/unit/language_helper_test.rb
... ... @@ -65,6 +65,22 @@ class LanguageHelperTest &lt; ActiveSupport::TestCase
65 65 assert result.blank?
66 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 84 protected
69 85 include NoosferoTestHelper
70 86 include ActionView::Helpers::FormOptionsHelper
... ...