12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class TextModule < ApplicationModel
- include HasDefaultModelUserRelations
- include ChecksClientNotification
- include ChecksHtmlSanitized
- include CanCsvImport
- include HasSearchIndexBackend
- include CanSelector
- include CanSearch
- validates :name, presence: true
- validates :content, presence: true
- before_create :validate_content
- before_update :validate_content
- validates :note, length: { maximum: 250 }
- sanitized_html :content, :note
- csv_delete_possible true
- has_and_belongs_to_many :groups, after_add: :cache_update, after_remove: :cache_update, class_name: 'Group'
- association_attributes_ignored :user
- =begin
- import text modules from i18n/text_modules/*.yml if no text modules exist yet.
- TextModule.load('de-de') # e. g. 'en-us' or 'de-de'
- =end
- def self.load(locale)
- raise __("The required parameter 'locale' is missing.") if locale.blank?
- return if !TextModule.count.zero?
- locale = locale.split(',').first.downcase # in case of accept_language header is given
- # First check the full locale, e.g. 'de-de'.
- filename = Rails.root.join("i18n/text_modules/#{locale}.yml")
- if !File.exist?(filename)
- # Fall back to the more generic language if needed, e.g. 'de'.
- locale = locale.split('-').first
- filename = Rails.root.join("i18n/text_modules/#{locale}.yml")
- end
- if !File.exist?(filename)
- # No text modules available for current locale data.
- return
- end
- file_content = File.read(filename)
- result = Psych.load(file_content)
- raise "Can't load text modules from #{filename}" if result.empty?
- ActiveRecord::Base.transaction do
- result.each do |text_module|
- text_module[:updated_by_id] = 1
- text_module[:created_by_id] = 1
- TextModule.create(text_module.symbolize_keys!)
- end
- end
- true
- end
- private
- def validate_content
- return true if content.blank?
- return true if content.match?(%r{<.+?>})
- content.gsub!(%r{(\r\n|\n\r|\r)}, "\n")
- self.content = content.text2html
- true
- end
- end
|