Class: Tr8n::LanguageController

Inherits:
BaseController
  • Object
show all
Defined in:
app/controllers/tr8n/language_controller.rb

Instance Method Summary collapse

Methods inherited from BaseController

#tr8n_current_language, #tr8n_current_translator, #tr8n_current_user, #tr8n_current_user_is_admin?, #tr8n_current_user_is_guest?, #tr8n_current_user_is_manager?, #tr8n_current_user_is_translator?, #tr8n_default_language

Instance Method Details

#indexObject



33
34
35
36
37
# File 'app/controllers/tr8n/language_controller.rb', line 33

def index
  @rules = rules_by_dependency(tr8n_current_language.rules)
  @cases = tr8n_current_language.cases
  @fallback_language = (tr8n_current_language.fallback_language || tr8n_default_language)
end

#lb_language_case_ruleObject



282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'app/controllers/tr8n/language_controller.rb', line 282

def lb_language_case_rule
  @case = Tr8n::LanguageCase.new(params[:case])
  @rule_index = params[:rule_index]

  if params[:case_action].index("add_rule_at")
    @rule = Tr8n::LanguageCaseRule.new(:definition => {})
    @new_rule = true
  else
    @rule = Tr8n::LanguageCaseRule.new(params[:rule])
  end

  render :layout => false
end

#listsObject

language selector management functions



209
210
211
212
213
214
215
216
217
218
219
220
# File 'app/controllers/tr8n/language_controller.rb', line 209

def lists
  if request.post? 
    if params[:language_action] == "remove"
      lu = Tr8n::LanguageUser.find(:first, :conditions => ["language_id = ? and user_id = ?", params[:language_id].to_i, tr8n_current_user.id])
      lu.destroy
    end
  end

  @all_languages = Tr8n::Language.enabled_languages
  @user_languages = Tr8n::LanguageUser.languages_for(tr8n_current_user)
  render(:partial => "lists")  
end

#removeObject



222
223
224
225
226
# File 'app/controllers/tr8n/language_controller.rb', line 222

def remove
  lu = Tr8n::LanguageUser.find(:first, :conditions => ["language_id = ? and user_id = ?", params[:language_id].to_i, tr8n_current_user.id])
  lu.destroy if lu
  redirect_to_source
end

#selectObject

language selector window



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'app/controllers/tr8n/language_controller.rb', line 180

def select
  @inline_translations_allowed = false
  @inline_translations_enabled = false

  if tr8n_current_user_is_translator? 
    unless tr8n_current_translator.blocked?
      @inline_translations_allowed = true
      @inline_translations_enabled = tr8n_current_translator.enable_inline_translations?
    end
  else
    @inline_translations_allowed = Tr8n::Config.open_registration_mode?
  end

  @inline_translations_allowed = true if tr8n_current_user_is_admin?

  @source_url = request.env['HTTP_REFERER']
  @source_url.gsub!("locale", "previous_locale") if @source_url

  @all_languages = Tr8n::Language.enabled_languages
  @user_languages = Tr8n::LanguageUser.languages_for(tr8n_current_user) unless tr8n_current_user_is_guest?

  if params[:lightbox]
    render :partial => "select"
  else
    render :layout => false
  end      
end

#switchObject

language selector processor



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'app/controllers/tr8n/language_controller.rb', line 229

def switch
  language_action = params[:language_action]

  return redirect_to_source if tr8n_current_user_is_guest?

  if tr8n_current_user_is_translator? # translator mode
    if language_action == "toggle_inline_mode"
      if tr8n_current_translator.enable_inline_translations?
        language_action = "disable_inline_mode"
      else      
        language_action = "enable_inline_mode"
      end
    end
  
    if language_action == "enable_inline_mode"
      tr8n_current_translator.enable_inline_translations!
    elsif language_action == "disable_inline_mode"
      tr8n_current_translator.disable_inline_translations!
    elsif language_action == "switch_language"
      tr8n_current_translator.switched_language!(Tr8n::Language.find_by_locale(params[:locale]))
    end   
  elsif language_action == "switch_language"  # non-translator mode
    Tr8n::LanguageUser.create_or_touch(tr8n_current_user, Tr8n::Language.find_by_locale(params[:locale]))
  elsif language_action == "become_translator" # non-translator mode
    Tr8n::Translator.register
  elsif language_action == "enable_inline_mode" or language_action == "toggle_inline_mode" # non-translator mode
    Tr8n::Translator.register.enable_inline_translations!
  end

  redirect_to_source
end

#tableObject



278
279
280
# File 'app/controllers/tr8n/language_controller.rb', line 278

def table
  @source_url = params[:source_url] || request.env['HTTP_REFERER']
end

#translatorObject

inline translator popup window as well as translation backend method



262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# File 'app/controllers/tr8n/language_controller.rb', line 262

def translator
  @translation_key = Tr8n::TranslationKey.find(params[:translation_key_id])
  @translations = @translation_key.inline_translations_for(tr8n_current_language)
  @source_url = params[:source_url] || request.env['HTTP_REFERER']
  @translation = Tr8n::Translation.default_translation(@translation_key, tr8n_current_language, tr8n_current_translator)

  if params[:mode]  # switching modes
    @mode = params[:mode]
    return render(:partial => "translator_#{@mode}")
  else 
    @mode = (@translations.empty? ? "submit" : "votes") unless @mode
  end

  render(:layout => false)
end

#update_language_case_rulesObject

ajax method for updating language case rules in edit mode



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'app/controllers/tr8n/language_controller.rb', line 139

def update_language_case_rules
  cases = parse_language_cases
  case_index = params[:case_index].to_i
  lcase = cases[case_index]

  if params[:case_action].index("add_rule_at")
    position = params[:case_action].split("_").last.to_i
    rule_data = params[:edit_rule].merge(:language => tr8n_current_language)
    lcase.language_case_rules.insert(position, Tr8n::LanguageCaseRule.new(rule_data))
  
  elsif params[:case_action].index("update_rule_at")
    position = params[:case_action].split("_").last.to_i
    rule_data = params[:edit_rule].merge(:language => tr8n_current_language)
    lcase.language_case_rules[position].definition = params[:edit_rule][:definition]

  elsif params[:case_action].index("move_rule_up_at")
    position = params[:case_action].split("_").last.to_i
    temp_node = lcase.language_case_rules[position-1]
    lcase.language_case_rules[position-1] = lcase.language_case_rules[position]
    lcase.language_case_rules[position] = temp_node              

  elsif params[:case_action].index("move_rule_down_at")
    position = params[:case_action].split("_").last.to_i
    temp_node = lcase.language_case_rules[position+1]
    lcase.language_case_rules[position+1] = lcase.language_case_rules[position]
    lcase.language_case_rules[position] = temp_node              
          
  elsif params[:case_action].index("delete_rule_at")
    position = params[:case_action].split("_").last.to_i
    lcase.language_case_rules.delete_at(position)
  
  elsif params[:case_action].index("clear_all")
    lcase.language_case_rules = []
  
  end

  render(:partial => "edit_language_case_rules", :locals => {:lcase => lcase, :case_index => case_index})
end

#update_language_casesObject

ajax method for updating language cases in edit mode



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'app/controllers/tr8n/language_controller.rb', line 118

def update_language_cases
  @cases = parse_language_cases

  unless params[:case_action]
    return render(:partial => "edit_cases")
  end
  
  if params[:case_action].index("add_at")
    position = params[:case_action].split("_").last.to_i
    @cases.insert(position, Tr8n::LanguageCase.new(:language => tr8n_current_language))
  elsif params[:case_action].index("delete_at")
    position = params[:case_action].split("_").last.to_i
    @cases.delete_at(position)
  elsif params[:case_action].index("clear_all")
    @cases = []
  end

  render :partial => "edit_language_cases"      
end

#update_language_sectionObject



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
93
94
# File 'app/controllers/tr8n/language_controller.rb', line 39

def update_language_section
  @cases = tr8n_current_language.cases
  @rules = rules_by_dependency(tr8n_current_language.rules)
  @fallback_language = (tr8n_current_language.fallback_language || tr8n_default_language)

  unless request.post?
    return render(:partial => params[:section], :locals => {:mode => params[:mode].to_sym})
  end

  @error_msg = validate_language
  if @error_msg
    return render(:partial => params[:section], :locals => {:mode => params[:mode].to_sym})
  end

  tr8n_current_language.update_attributes(params[:language])

  if params[:section] == 'grammar'
    old_rule_ids = tr8n_current_language.rules.collect{|rule| rule.id}
    parse_language_rules.each do |rule|
      rule.language = tr8n_current_language
      rule.save_with_log!(tr8n_current_translator)
      old_rule_ids.delete(rule.id)
    end

    # clean up the remaining/deleted rules
    old_rule_ids.each do |id| 
      rule = Tr8n::LanguageRule.find(id)
      rule.destroy_with_log!(tr8n_current_translator)
    end
  
    Tr8n::Cache.delete("language_rules_#{tr8n_current_language.id}") 
  end

  if params[:section] == 'language_cases'
    # remove old cases
    tr8n_current_language.cases.each do |lcase|
      lcase.destroy
    end
  
    # create new cases
    parse_language_cases.each do |lcase|
      lcase.language = tr8n_current_language
      lcase.save_with_log!(tr8n_current_translator)
    end

    Tr8n::Cache.delete("language_cases_#{tr8n_current_language.id}") 
  end

  tr8n_current_language.reload

  @rules = rules_by_dependency(tr8n_current_language.rules)
  @cases = tr8n_current_language.cases
  @fallback_language = (tr8n_current_language.fallback_language || tr8n_default_language)

  render(:partial => params[:section], :locals => {:mode => :view})
end

#update_rulesObject

ajax method for updating language rules in edit mode



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'app/controllers/tr8n/language_controller.rb', line 97

def update_rules
  @rules = rules_by_dependency(parse_language_rules)

  unless params[:rule_action]
    return render(:partial => "edit_rules")
  end

  if params[:rule_action].index("add_at")
    position = params[:rule_action].split("_").last.to_i
    cls = Tr8n::Config.language_rule_dependencies[params[:rule_type]]
    @rules[cls.dependency].insert(position, cls.new(:language => tr8n_current_language))
  elsif params[:rule_action].index("delete_at")
    position = params[:rule_action].split("_").last.to_i
    cls = Tr8n::Config.language_rule_dependencies[params[:rule_type]]
    @rules[cls.dependency].delete_at(position)
  end

  render :partial => "edit_rules"      
end